Встречается на собеседованиях • сегодня

Что такое метакласс (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 с автоматической генерацией методов
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы