Уведомления

Группа в Telegram: @pythonsu

#1 Март 28, 2020 21:43:06

anton.glukhenko
Зарегистрирован: 2020-03-28
Сообщения: 1
Репутация: +  0  -
Профиль   Отправить e-mail  

wraps

Не понимаю почему теряется calls, когда я навешиваю декоратор other_deco? Ведь @wraps(func) должен прокидывать __dict__ и в частности атрибут функции calls.
Вопрос: как прокинуть атрибуты функции во внешние декораторы?

 def other_deco(func):
    @wraps(func)
    def wrapper():
        return func()
    return wrapper
 def countcalls(func):
    @wraps(func)
    def wrapper():
        wrapper.calls += 1
        return func()
    wrapper.calls = 0
    return wrapper
 @other_deco
 @countcalls
 def f1():
     pass
 f1()
 f1()
 f1()
 print(f1.calls) # 0 (хотя ожидаю 3)

Отредактировано anton.glukhenko (Март 28, 2020 23:32:36)

Офлайн

#2 Март 29, 2020 08:07:50

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  252  -
Профиль   Отправить e-mail  

wraps

anton.glukhenko
должен прокидывать
В документации не вижу никакого “прокидывания”. Поэтому вовсе не “должно”, чтобы в вашем понимании это ни значило.
anton.glukhenko
Не понимаю почему теряется calls
Никуда оно не теряется (оно же печатается!). Просто как вы и просили их два, по одному в каждой функции.



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version