Я вхожу в Python и просто немного борюсь с этим примером кода с сайта "Real Python".
import functools
def count_calls(func):
def wrapper_count_calls(*args, **kwargs):
wrapper_count_calls.num_calls += 1
print(f"Call {wrapper_count_calls.num_calls} of {func.__name__!r}")
return func(*args, **kwargs)
wrapper_count_calls.num_calls = 0
return wrapper_count_calls
@count_calls
def say_whee():
print("Whee!")
Вот результат, полученный при нескольких вызовах функции "say_whee".
>>> say_whee()
Call 1 of 'say_whee'
Whee!
>>> say_whee()
Call 2 of 'say_whee'
Whee!
>>> say_whee.num_calls
2
Недоумение вызывает то, что строка "wrapper_count_calls.num_calls = 0" не кажется, выполняется, когда вызывается функция «say_whee», хотя она имеет декоратор «@count_calls»