В Python: почему некоторые свойства теряются при двукратном использовании другого декоратора для функции?Python

Программы на Python
Anonymous
В Python: почему некоторые свойства теряются при двукратном использовании другого декоратора для функции?

Сообщение Anonymous »

Я учусь использовать декоратор в Python. Здесь я использую два разных декоратора для функции.
Почему атрибут call_count из первого декоратора теряется после использования второго декоратора.
Он все еще существует в памяти, но я не могу найти к нему доступ?

Код: Выделить всё

def fib(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fib(n - 2) + fib(n - 1)

def count(f):
def counted(n):
counted.call_count += 1
return f(n)

counted.call_count = 0
return counted

def count_frames(f):
def counted(n):
counted.open_count += 1
counted.max_count = max(counted.max_count, counted.open_count)
result = f(n)
counted.open_count -= 1
return result

counted.open_count = 0
counted.max_count = 0
return counted

fib = count(fib)
fib = count_frames(fib)
print(fib(19), fib.__dict__)
Я думал, что «fib.dict» будет содержать атрибут «call_count»,
но он содержит только атрибуты «open_count» и «max_count» из второго декоратора

Подробнее здесь: https://stackoverflow.com/questions/787 ... o-a-functi

Вернуться в «Python»