Встречается на собеседованиях • сегодня
Что такое метакласс (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
интервью вопросы и ответы