Ответ
В классах Python существует три основных вида методов, различающихся по первому аргументу и области применения:
-
Методы экземпляра (Instance Methods)
- Принимают
self(экземпляр класса) в качестве первого аргумента. - Назначение: Работа с состоянием конкретного объекта. Это самый распространенный тип методов.
- Принимают
-
Методы класса (Class Methods)
- Декорируются
@classmethodи принимаютcls(сам класс) в качестве первого аргумента. - Назначение: Работа с классом в целом, а не с его экземпляром. Часто используются для создания альтернативных конструкторов (фабричных методов).
- Декорируются
-
Статические методы (Static Methods)
- Декорируются
@staticmethodи не принимаютselfилиclsв качестве обязательного первого аргумента. - Назначение: Логически связаны с классом, но не зависят ни от состояния класса, ни от состояния экземпляра. По сути, это обычные функции, помещенные в пространство имен класса.
- Декорируются
Пример:
class Pizza:
def __init__(self, radius):
self.radius = radius # Атрибут экземпляра
# 1. Метод экземпляра
def get_area(self):
# Работает с данными конкретной пиццы (self)
return 3.14 * (self.radius ** 2)
# 2. Метод класса (фабричный метод)
@classmethod
def from_diameter(cls, diameter):
# Создает экземпляр, используя данные, связанные с классом
return cls(diameter / 2)
# 3. Статический метод
@staticmethod
def cook_instructions():
# Не зависит ни от класса, ни от экземпляра
return "Bake at 220°C for 15 minutes."
# Использование:
pizza_1 = Pizza(15)
print(f"Площадь первой пиццы: {pizza_1.get_area()}")
pizza_2 = Pizza.from_diameter(40) # Создание через метод класса
print(f"Радиус второй пиццы: {pizza_2.radius}")
print(Pizza.cook_instructions()) # Вызов статического метода