summary[category] = pd.DataFrame(columns=mux)
Вот это что такое? Это каждое значение твоего словаря фрейм еще и с иерархичесиким индексами. return (a:= a+1)
при условии что а
в области видимости, потому что всегда выполняется сначала то что справа от знака присваивания. А тут вскрылся нюанс, так что даже наоборот хорошо. 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())
Вот так выглядит каждое значение твоего словаря (фрейм), которые ты пытаешься заполнить, это что бы ты понимал что происходит. Это к слову о декомпозиции.