TransWikia.com

Вопрос по метаклассам

Stack Overflow на русском Asked by user364464 on January 18, 2021

Изучаю метаклассы в 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')? Почему команды выполняются в порядке противоположенном, указанному мной? Хотелось бы прояснить этот момент.

One Answer

Метаклассы тут ни при чем.

Весь код внутри классов, но вне его методов, выполняется при объявлении класса, до создания объекта. По порядку у вас объявлен сначала класс Meta - выводится "meta", ниже объявлен класс User - выводится 1, потом вы создаете объект - выводится "__init__ User".

Correct answer by insolor on January 18, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP