Свой метакласс в ООП в 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.