Вопрос по метаклассам
Изучаю метаклассы в python. Немогу понять одну вещь. Допустим есть код:
class Meta(type):
print('meta')
class User(metaclass=Meta):
def __init__(self):
print('__init__ User')
print(1)
x = User()
Немогу понять, почему код выполняется в том порядке, в котором он выполняется. Разве не должно быть все в точности наоборот, т.е. сначала исполняться команда print('__init__ User'), затем команда print(1) и только после этого каманда print('meta')? Почему команды выполняются в порядке противоположенном, указанному мной? Хотелось бы прояснить этот момент.
Ответы (1 шт):
Метаклассы тут ни при чем.
Весь код внутри классов, но вне его методов, выполняется при объявлении класса, до создания объекта. По порядку у вас объявлен сначала класс Meta - выводится "meta", ниже объявлен класс User - выводится 1, потом вы создаете объект - выводится "__init__ User".