Sobes.tech
Back to questions
Junior — Middle
46

Какие специальные методы метакласса автоматически вызываются при создании нового класса?

Answer from AI

sobes.tech AI

При создании нового класса в Python метакласс автоматически вызывает несколько специальных методов, наиболее важные из них:

  • __new__(cls, name, bases, attrs) — создаёт новый объект класса. Вызывается первым, отвечает за создание самого класса.
  • __init__(cls, name, bases, attrs) — инициализирует созданный класс, можно использовать для настройки атрибутов.
  • __call__(cls, *args, **kwargs) — вызывается при создании экземпляра класса (т.е. когда класс вызывается как функция).

Процесс создания класса выглядит так:

  1. Вызывается __new__ метакласса, который создаёт объект класса.
  2. Затем вызывается __init__ метакласса для инициализации класса.

Пример метакласса с переопределением этих методов:

class Meta(type):
    def __new__(cls, name, bases, attrs):
        print(f"Создание класса {name}")
        return super().__new__(cls, name, bases, attrs)

    def __init__(cls, name, bases, attrs):
        print(f"Инициализация класса {name}")
        super().__init__(name, bases, attrs)

class MyClass(metaclass=Meta):
    pass

# При определении MyClass будет выведено:
# Создание класса MyClass
# Инициализация класса MyClass

Таким образом, эти методы метакласса позволяют контролировать процесс создания и настройки новых классов.