> Что такое метаклассы в Python и для чего они используются (Python)
Уровень: junior · Роль: backend · Категория: Технические вопросы
Компании: Masterdata
Стек: Python
> Пример ответа
Метаклассы в Python - это классы, экземплярами которых являются другие классы. Проще говоря, метакласс определяет поведение класса, так же как класс определяет поведение объекта. По умолчанию все классы в Python создаются метаклассом type. Когда вы пишете class MyClass:, Python вызывает type.__new__ и type.__init__ для создания объекта класса.
Метаклассы используются для перехвата и модификации процесса создания класса. Основные сценарии применения:
-
Автоматическая регистрация классов - например, в ORM или фреймворках, где нужно собрать все классы, наследующие от базового, в реестр.
-
Валидация атрибутов - проверка, что все методы имеют определенные сигнатуры или что классы следуют контракту.
-
Добавление методов или атрибутов - например, автоматическая генерация геттеров/сеттеров или добавление метаданных.
-
Реализация singleton-паттерна на уровне класса - контроль создания самого класса, а не его экземпляров.
Пример простого метакласса, который добавляет префикс к именам методов:
PYTHONclass PrefixMeta(type):def __new__(cls, name, bases, dct):prefixed = {}for attr_name, value in dct.items():if callable(value) and not attr_name.startswith('__'):prefixed[f'custom_{attr_name}'] = valueelse:prefixed[attr_name] = valuereturn super().__new__(cls, name, bases, prefixed)class MyService(metaclass=PrefixMeta):def run(self):return "running"obj = MyService()print(obj.custom_run()) # "running"
Важно помнить, что метаклассы - мощный, но редко необходимый инструмент. В большинстве случаев задачи можно решить с помощью декораторов классов, наследования или __init_subclass__. Метаклассы стоит применять, когда нужно изменить саму структуру класса на этапе его определения, а не поведение экземпляров.
> Похожие задачи по backend
Какие методы профилирования и поиска утечек памяти существуют
В чем разница асинхронности, многопоточности и многопроцессорности в Python
В чем разница между словарем Python и форматом данных JSON
Как обрабатывать JSON объекты из файла с одинаковыми элементами
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью