Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗pyOpCcMt 164 of 174 menu
◀ ▶

Свой метакласс в ООП в Python

__init_subclass__ срабатывает, когда появляется потомок. Но он не меняет сам процесс создания класса. Если нужно вмешаться в момент, когда Python строит класс User, используют метакласс.

Метакласс - это класс, экземпляры которого являются классами. Обычно наследуют от type и переопределяют метод __new__:

class Meta(type): def __new__(mcls, name, bases, namespace): print('creating class:', name) return super().__new__(mcls, name, bases, namespace)

Укажем метакласс при объявлении User:

class User(metaclass=Meta): pass

Сообщение выводится один раз - в момент создания класса, а не объекта:

user = User()

Метакласс нужен там, где хука потомка мало: проверка атрибутов класса, авторегистрация, изменение словаря методов до готовности класса.

Сделайте метакласс Meta, который в __new__ добавляет в класс атрибут label со значением 'model'.

Объявите Employee с этим метаклассом и выведите Employee.label.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить