class MyClass: pass
) он будет исполнен это объект, который при его объявлении, а не при вызове. Попробуй например class BadClass:
a = 1/0
тебе не надо инициализировать экземпляр класса, ты получишь ошибку. Потому что код будет выполнен, в отличии от функции например (там только при вызове). MyClass = decor(MyClass)
имя 'MyClass' это указатель на объект внутренней функции. Иными словами 'MyClass = _wrapper'decor(MyClass)
мы передаем объект класса. То есть он доступен для _wrapper в расширенной но не глобальной области видимости. Вот здесь ты инициализируешь экземпляр func(*args, **kwargs), я тебе еще замечание насчет имени func сделал, так и запутаться не долго, у тебя происходит result = MyClass(). То есть создание экземпляра твоего класса, затем ты потенциально декорируешь его "увеличиваешь функциональность например" и возвращаешь. Все. MyClass = decor(MyClass)
давать имя ссылке на объект функции _wrapper 'MyClass'. это сделано, что бы вызов не отличался. Для понимания ну сделай например так. My_Decorated_Class_builder = decor(MyClass)
decorated_class_instances = My_Decorated_Class_builder()
normal_class_instance = MyClass()
print(decorated_class_instances.complex_calculation())
print(normal_class_instance.complex_calculation())