Найти - Пользователи
Полная версия: wraps
Начало » Python для новичков » wraps
1
anton.glukhenko
Не понимаю почему теряется 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)
doza_and
anton.glukhenko
должен прокидывать
В документации не вижу никакого “прокидывания”. Поэтому вовсе не “должно”, чтобы в вашем понимании это ни значило.
anton.glukhenko
Не понимаю почему теряется calls
Никуда оно не теряется (оно же печатается!). Просто как вы и просили их два, по одному в каждой функции.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB