Что такое метакласс (metaclass)

Python Senior Без компании
Что такое метакласс (metaclass)
Ответы
**Метакласс** — это «класс классов», который определяет, как создаются и ведут себя другие классы. Это мощный механизм, позволяющий перехватывать и модифицировать процесс создания класса. **Простая аналогия** Если класс — это фабрика по созданию объектов (экземпляров), то метакласс — это фабрика по созданию фабрик (классов). *Базовый пример* Метакласс, который автоматически добавляет всем методам класса логирование: ``` 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) @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" def method2(self): return "Результат method2" # Тестируем obj = MyClass() obj.method1() # Вывод: "Вызов метода: method1" obj.method2() # Вывод: "Вызов метода: method2" ``` **Когда действительно нужны метаклассы?** - Создание ORM (как в Django или SQLAlchemy) - Регистрация плагинов/расширений - Принудительная валидация структуры классов - Создание API с автоматической генерацией методов