Какие методы метакласса (metaclass) вызываются при объявление класса
Python
Middle
Без компании
Какие методы метакласса (metaclass) вызываются при объявление класса
Ответы
При объявлении класса метакласс вызывает следующие методы в порядке их выполнения:
- `__prepare__(metacls, name, bases, **kwargs)` - вызывается первым, создает пространство имен для класса (возвращает dict-like объект). Необязательный метод.
- `__new__(metacls, name, bases, namespace, **kwargs)` - создает и возвращает новый класс. Здесь можно модифицировать атрибуты класса до его создания.
- `__init__(cls, name, bases, namespace, **kwargs)` - инициализирует созданный класс. Аналог `__init__` для обычных классов.
Пример:
```
class Meta(type):
@classmethod
def __prepare__(metacls, name, bases, **kwargs):
print("__prepare__")
return {}
def __new__(metacls, name, bases, namespace, **kwargs):
print("__new__")
return super().__new__(metacls, name, bases, namespace)
def __init__(cls, name, bases, namespace, **kwargs):
print("__init__")
super().__init__(name, bases, namespace)
class MyClass(metaclass=Meta):
pass
```
Вывод:
```
__prepare__
__new__
__init__
```