Метаклассы и их применение
Python
Senior
Яндекс
Что такое метакласс в Python и в каких случаях его использование оправдано? Приведите пример практического кейса.
Ответы
Метаклассы
Метакласс — это класс, который создаёт другие классы. По умолчанию метакласс `type`. Переопределяя его методы (`__new__`, `__init__`), можно вмешиваться в создание классов: модифицировать атрибуты, регистрировать классы, делать автогенерацию.
Применение:
- авто-регистрация обработчиков (ORM, DI-контейнеры),
- валидация структуры класса,
- DSL/фреймворки.
Пример простого реестра:
```python
class RegistryMeta(type):
registry = {}
def __new__(mcls, name, bases, attrs):
cls = super().__new__(mcls, name, bases, attrs)
if name != 'Base':
mcls.registry[name] = cls
return cls
class Base(metaclass=RegistryMeta):
pass
class HandlerA(Base):
pass
print(RegistryMeta.registry) # {'HandlerA': <class ...>}
```