Встречается на 8% собеседований по Python
Что такое метакласс (metaclass)
Метакласс — это «класс классов», который определяет, как создаются и ведут себя другие классы. Это мощный механизм, позволяющий перехватывать и модифицировать процесс создания класса.
Простая аналогия
Если класс — это фабрика по созданию объектов (экземпляров), то метакласс — это фабрика по созданию фабрик (классов).
Базовый пример
Метакласс, который автоматически добавляет всем методам класса логирование:
text
class LoggingMeta(type):
def __new__(cls, name, bases, attrs):
# Перебираем все атрибуты класса
for attr_name, attr_value in attrs.items():
# Если это функция/метод - оборачиваем в логирование
if callable(attr_value):
attrs[attr_name] = cls.wrap_with_logging(attr_value)
# Создаем класс с модифицированными атрибутами
return super().__new__(cls, name, bases, attrs)
text
@staticmethod
def wrap_with_logging(method):
def wrapper(*args, **kwargs):
print(f"Вызов метода: {method.__name__}")
return method(*args, **kwargs)
return wrapperИспользуем наш метакласс
class MyClass(metaclass=LoggingMeta):
def method1(self):
return "Результат method1"
text
def method2(self):
return "Результат method2"Тестируем
obj = MyClass()
obj.method1() # Вывод: "Вызов метода: method1"
obj.method2() # Вывод: "Вызов метода: method2"
text
**Когда действительно нужны метаклассы?**
\- Создание ORM (как в Django или SQLAlchemy)
\- Регистрация плагинов/расширений
\- Принудительная валидация структуры классов
\- Создание API с автоматической генерацией методов
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
Похожие вопросы
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы