@mr_forlife

Для чего нужны метаклассы в Python?

Изучая вопрос по метаклассам, никак не моу понять их суть. Все примеры на которых они объясняются можно реализовать переопределив у класса метод __new__. Единственное, что нельзя сделать данным образом, а только с помощью метакласса, так это переопределить список классов наследования. Но не только же для этого добавили такую непростую штуку в язык. Что я упускаю?
  • Вопрос задан
  • 100 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
Это механизм, позволяющий изменить процесс создания класса.
Например, превратить аннотации типов в классе в поля/свойства экземпляра и автоматически создать их в конструкторе, или зарегистрировать созданный класс в некотором реестре, или ещё что-то. Да, всё это можно сделать и с помощью декораторов или иных инструментов - но метаклассы позволяют это сделать вообще без дополнительных телодвижений со стороны пользовательского кода.
Как, по твоему, тот же pydantic превращает описание класса-модели, состоящее из одних аннотаций, в класс с геттегами/сеттерами, валидацией и ещё чёрт знает чем?
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@aleks-th
https://habr.com/ru/articles/145835/
Довольно подробно описано в этой статье для чего это нужно.

Если кратко то метаклассы нужны чтобы налету создавать классы.
Ответ написан
Комментировать
wearyweary
@wearyweary
Вечный студент
Как уже выше написали - метаклассы нужны чтобы в рантайме создавать другие классы. Используется например в ORM, таких как PonyORM/SQLAlchemy чтобы генерировать энтити, которые потом будут отображены на строки в таблицах в базе данных.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы