Декоратор 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, когда вам нужно получить доступ к атрибутам класса или создать альтернативные способы создания объектов.
Попробуйте сами
В этом уроке нет задания по программированию.
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Object Oriented Programming
1Основы ООП
Внешние файлыВведение в ООПКлассы и объектыПараметр selfМетодыАтрибутыМетод-конструктор (__init__)Повторение — Простой калькулятор4Наследование
Базовое наследованиеФункция super()Переопределение методовМножественное наследованиеПорядок разрешения методовИтоги — Иерархия сотрудников7Специальные методы
Введение в магические методыПерегрузка операторовМагические методы контейнеровПовторение — Пользовательский список10Паттерны проектирования. Часть 1
Введение в паттерны проектированияПаттерн SingletonПаттерн FactoryПаттерн ObserverПаттерн Strategy5Полиморфизм
Снова о переопределении методовУтиная типизацияАбстрактные классы и методыПроектирование интерфейсовИтоги — Калькулятор фигур8Продвинутые концепции ООП
Композиция против наследованияМиксиныСтатические методы и методы классаДекораторы классовМенеджеры контекста11Паттерны проектирования. Часть 2
Паттерн КомандаПаттерн АдаптерПаттерн ДекораторПаттерн Шаблонный методПаттерн СостояниеПаттерн Компоновщик3Свойства классов
Переменные экземпляра и классаДекораторы свойствПриватные атрибутыИтоги — Менеджер банковского счета6Инкапсуляция
Public, Protected, Private члены классаМодификаторы доступаСокрытие данныхДекораторы property: продвинутый уровеньИтоги: Система учета студентов12Проект: Управление библиотекой
Обзор проектаКлассы Book и User