Oleg Alexandrov

@classmethod

Назад

Декоратор @classmethod — это метод, который получает класс в качестве параметра, который принято обозначать как cls. Он указывает на класс ToyClass, а не на объект этого класса.

@classmethod — это обычный метод класса, имеющий доступ ко всем атрибутам класса, через который он был вызван.

from datetime import date

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    # classmethod создает объект человека
    # по дате рождения
    @classmethod
    def from_birth_year(cls, name, year):
        return cls(name, date.today().year)

person1 = Person('Artem', 21)
person2 = Person.from_birth_year('Artem', 1996)

print (person1.age) # 21
print (person2.age) # 22

Назад