@classmethod
[!info] Основное применение Для создания нескольких инициализаторов в классе. Т.к. позволяет изменять свойства класса
Если захотим изменить переменную класса (которая находится в классе а не в __init__
) ...
...
p = Person()
p.name = 'asdfadsfdsgdsfag'
...
1234
Ничего не выйдет - как раз из-за пространства имен (LEGB
)
Это можно сделать с помощью @classmethod
class Person:
name = "Dima"
@classmethod
def change_name(cls, name): # cls просто ставится вместо self
cls.name = name # чтобы показать, что речь идёт о классе а не о экземпляре
p = Person()
print(p.__dict__)
p.change_name("Ivan")
12345678910
Еще пример кода:
...
@classmethod
def from_obj(cls, obj):
if hasattr(obj, 'name'): # Проверяет наличие метода у объекта
name = getattr(obj, 'name')
...
Last updated
Was this helpful?