Почему некоторые свойства теряются при двукратном использовании разных декораторов для функции?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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

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