> Что такое метаклассы в Python и для чего они используются (Python)

Уровень: junior · Роль: backend · Категория: Технические вопросы

Компании: Masterdata

Стек: Python

> Пример ответа

Метаклассы в Python - это классы, экземплярами которых являются другие классы. Проще говоря, метакласс определяет поведение класса, так же как класс определяет поведение объекта. По умолчанию все классы в Python создаются метаклассом type. Когда вы пишете class MyClass:, Python вызывает type.__new__ и type.__init__ для создания объекта класса.

Метаклассы используются для перехвата и модификации процесса создания класса. Основные сценарии применения:

  1. Автоматическая регистрация классов - например, в ORM или фреймворках, где нужно собрать все классы, наследующие от базового, в реестр.

  2. Валидация атрибутов - проверка, что все методы имеют определенные сигнатуры или что классы следуют контракту.

  3. Добавление методов или атрибутов - например, автоматическая генерация геттеров/сеттеров или добавление метаданных.

  4. Реализация singleton-паттерна на уровне класса - контроль создания самого класса, а не его экземпляров.

Пример простого метакласса, который добавляет префикс к именам методов:

PYTHON
class 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}'] = value
else:
prefixed[attr_name] = value
return super().__new__(cls, name, bases, prefixed)
class MyService(metaclass=PrefixMeta):
def run(self):
return "running"
obj = MyService()
print(obj.custom_run()) # "running"

Важно помнить, что метаклассы - мощный, но редко необходимый инструмент. В большинстве случаев задачи можно решить с помощью декораторов классов, наследования или __init_subclass__. Метаклассы стоит применять, когда нужно изменить саму структуру класса на этапе его определения, а не поведение экземпляров.

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью