self
), в то время как @classmethod
принимает сам класс (cls
) в качестве первого аргумента.@classmethod
позволяет вызывать метод непосредственно через класс (Class.method()
), а не только через экземпляр.
@classmethod
- это декоратор в Python, который используется для определения метода класса. Он позволяет методу получать доступ к самому классу (а не к экземпляру класса, как обычные методы) в качестве первого аргумента, обычно обозначаемого как cls
.
Отличия от обычных методов (методов экземпляра):
self
) в качестве первого аргумента. Методы класса получают сам класс (cls
) в качестве первого аргумента.
instance.method()
), а методы класса могут вызываться как через класс (например, ClassName.classmethod()
), так и через экземпляр класса (например, instance.classmethod()
). Однако, в последнем случае, в метод класса все равно будет передан сам класс, а не экземпляр.
@classmethod
часто используются для:
Пример:
class MyClass:
class_variable = "Hello"
def __init__(self, instance_variable):
self.instance_variable = instance_variable
def instance_method(self):
return f"Instance method: {self.instance_variable}, {MyClass.class_variable}"
@classmethod
def class_method(cls):
return f"Class method: {cls.class_variable}"
@classmethod
def from_string(cls, data_string):
# Предположим, что data_string имеет формат "value1,value2"
value1, value2 = data_string.split(",")
#Используем cls(...) для создания экземпляра класса
return cls(value1) # Пример создания экземпляра класса на основе строки
# Использование
instance = MyClass("World")
print(instance.instance_method()) # Вывод: Instance method: World, Hello
print(MyClass.class_method()) # Вывод: Class method: Hello
print(instance.class_method()) # Вывод: Class method: Hello (все равно вызывается через класс)
new_instance = MyClass.from_string("NewValue,Ignored")
print(new_instance.instance_variable) #Вывод: NewValue
В этом примере, class_method
получает доступ к переменной класса class_variable
. from_string
- альтернативный конструктор, который создает экземпляр класса на основе строки.