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

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

Сообщение 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 ... tion-twice

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