Эта статья поможет тебе понять, чем отличаются
staticmethod,classmethodиpropertyв Python, когда их использовать и как они помогают реализовать инкапсуляцию и чистый интерфейс классов.
- Не принимает ни
self, ниcls. - Это просто функция, логически принадлежащая классу.
- Не знает ничего о классе или экземпляре.
- Используется для утилитарных методов, не зависящих от состояния.
class MathUtils:
@staticmethod
def add(a, b):
return a + b
print(MathUtils.add(2, 3)) # 5Можно вызвать и через экземпляр:
m = MathUtils() print(m.add(2, 3)) # 5
Но он не использует m или MathUtils внутри.
-
Метод не зависит от данных экземпляра или класса.
-
Просто удобная функция внутри класса.
-
Принимает cls — ссылку на сам класс.
-
Может создавать экземпляры (
return cls(...)), изменять атрибуты класса. -
Полезен, когда логика связана с самим классом, а не с экземпляром.
class Person:
def __init__(self, name):
self.name = name
@classmethodd
def from_fullname(cls, fullname):
name = fullname.split()[0]
return cls(name) # создает экземпляр
p = Person.from_fullname("Alice Johnson")
print(p.name) # Alice-
Когда нужно создать экземпляр из альтернативных данных.
-
Когда метод должен работать с классом (например, менять атрибуты класса).
| Метод | Первый аргумент | Имеет доступ к классу | Имеет доступ к экземпляру | Основное применение |
|---|---|---|---|---|
@staticmethod |
❌ нет | ❌ нет | ❌ нет | Утилиты, вспомогательные методы |
@classmethod |
✅ cls |
✅ да | ❌ нет | Альтернативные конструкторы, работа с классом |
| Обычный метод | ✅ self |
✅ через self.__class__ |
✅ да | Работа с данными экземпляра |
[[Python]] [[IT]]