Какие методы метакласса (metaclass) вызываются в момент объявления самого класса
Python
Middle
Без компании
Какие методы метакласса (metaclass) вызываются в момент объявления самого класса
Ответы
При объявлении класса вызываются следующие методы метакласса:
- `__prepare__` (необязательный) - вызывается первым, возвращает пространство имён (обычно dict) для хранения атрибутов класса. Позволяет кастомизировать хранилище атрибутов.
```
@classmethod
def __prepare__(metacls, name, bases, **kwargs):
return OrderedDict()
```
- `__new__` - создаёт и возвращает новый класс. Получает метакласс, имя класса, кортеж базовых классов и пространство имён (из `__prepare__`).
```
def __new__(metacls, name, bases, namespace, **kwargs):
return super().__new__(metacls, name, bases, namespace)
```
- `__init__` - инициализирует созданный класс. Аналогичен обычному `__init__`, но для классов.
```
def __init__(cls, name, bases, namespace, **kwargs):
super().__init__(name, bases, namespace)
```
Порядок вызова: `__prepare__` → `__new__` → `__init__`. Эти методы позволяют полностью контролировать процесс создания класса.