Основное различие между обычным методом экземпляра и методом класса в Python заключается в том, как они связаны с классом и экземплярами этого класса, а также в том, какие аргументы они принимают.
Обычный метод экземпляра:
self
, который является ссылкой на экземпляр класса.instance.method()
).self
).Пример:
class MyClass:
def __init__(self, value):
self.value = value
def instance_method(self):
return f"Значение экземпляра: {self.value}"
instance = MyClass(10)
print(instance.instance_method()) # Выведет: Значение экземпляра: 10
Метод класса (@classmethod
):
cls
, который является ссылкой на сам класс.MyClass.class_method()
), либо для экземпляра класса (например, instance.class_method()
, хотя это и не рекомендуется).cls
), но не имеет прямого доступа к состоянию конкретного экземпляра.Пример:
class MyClass:
class_variable = "Привет"
@classmethod
def class_method(cls):
return f"Значение класса: {cls.class_variable}"
@classmethod
def create_from_string(cls, data):
# фабричный метод, создающий экземпляр класса из строки
value = data.split(',')[0] # простой пример разделения данных
return cls(value) #возвращаем новый экземпляр класса.
print(MyClass.class_method()) # Выведет: Значение класса: Привет
instance = MyClass.create_from_string("значение_из_строки,что-то_еще")
print(instance.value) # Выведет: значение_из_строки
Ключевые отличия:
self
(экземпляр), метод класса принимает cls
(класс).