Ответ
Процесс создания класса в Python — это многоэтапный механизм, управляемый метаклассами. По умолчанию используется метакласс type
.
Основные этапы:
-
Выполнение тела класса. Интерпретатор выполняет весь код, находящийся непосредственно в теле класса (
class MyClass: ...
). На этом шаге создаются атрибуты класса и функции (будущие методы). -
Формирование пространства имён. Все имена, созданные на предыдущем шаге, собираются в словарь, который становится пространством имён класса (его будущим атрибутом
__dict__
). -
Вызов метакласса. Вызывается метакласс
type
с тремя аргументами: имя нового класса (строка), кортеж базовых классов и словарь пространства имён.type('ClassName', (base_classes,), namespace_dict)
-
Создание объекта класса. Метакласс конструирует и возвращает новый объект-класс. На этом же этапе вычисляется порядок разрешения методов (MRO — Method Resolution Order) для корректного наследования.
Этот процесс позволяет динамически создавать классы в рантайме.
Пример:
# Стандартное определение класса
class MyClass:
x = 10
def get_x(self):
return self.x
# Динамическое создание эквивалентного класса с помощью метакласса type
def get_x_func(self):
return self.x
AnotherClass = type(
'AnotherClass', # 1. Имя класса
(), # 2. Кортеж базовых классов
{'x': 10, 'get_x': get_x_func} # 3. Словарь атрибутов и методов
)
instance = AnotherClass()
print(instance.get_x()) # Вывод: 10