Menu
Coddy logo textTech

Декоратор classmethod

Часть раздела Object Oriented Programming путешествия по Python на Coddy — урок 12 из 64.

Декоратор @classmethod создает методы, которые получают сам класс в качестве первого параметра (cls) вместо экземпляра (self).

Вот пример класса с методами класса:

class Student:
    school_name = "Python Academy"
    student_count = 0
    
    def __init__(self, name):
        self.name = name
        Student.student_count += 1
    
    @classmethod
    def get_school_info(cls):
        return f"School: {cls.school_name}, Students: {cls.student_count}"
    
    @classmethod
    def create_guest_student(cls):
        return cls("Guest")

Вызывайте методы класса, используя имя класса:

info = Student.get_school_info()
print(info)

Создайте несколько студентов:

alice = Student("Alice")
bob = Student("Bob")

updated_info = Student.get_school_info()
print(updated_info)

Используйте методы класса в качестве альтернативных конструкторов:

guest = Student.create_guest_student()
print(guest.name)
print(Student.get_school_info())

Вывод:

School: Python Academy, Students: 0
School: Python Academy, Students: 2
Guest
School: Python Academy, Students: 3

Методы класса также можно вызывать из экземпляров:

alice = Student("Alice")
info_from_instance = alice.get_school_info()
print(info_from_instance)

Вывод:

School: Python Academy, Students: 1

Ключевой момент: используйте @classmethod, когда вам нужно получить доступ к атрибутам класса или создать альтернативные способы создания объектов. Первым параметром является cls (сам класс), а не self.

Шпаргалка

Декоратор @classmethod создает методы, которые получают сам класс в качестве первого параметра (cls) вместо экземпляра (self).

class Student:
    school_name = "Python Academy"
    student_count = 0
    
    def __init__(self, name):
        self.name = name
        Student.student_count += 1
    
    @classmethod
    def get_school_info(cls):
        return f"School: {cls.school_name}, Students: {cls.student_count}"
    
    @classmethod
    def create_guest_student(cls):
        return cls("Guest")

Вызывайте методы класса, используя имя класса:

info = Student.get_school_info()
guest = Student.create_guest_student()

Методы класса также можно вызывать из экземпляров:

alice = Student("Alice")
info_from_instance = alice.get_school_info()

Используйте @classmethod, когда вам нужно получить доступ к атрибутам класса или создать альтернативные способы создания объектов.

Попробуйте сами

В этом уроке нет задания по программированию.

quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Object Oriented Programming