Привет немного непонятна работа декораторов. А конкретно как отрабатывает этот код:
from functools import wraps
def add_attrs(**q):
def decorator(func):
@wraps(func)
def wrapper(*args, **kwargs):
return func(*args, **kwargs)
for key, value in q.items():
wrapper.__dict__[key] = value
return wrapper
return decorator
@add_attrs(attr2='cat')
@add_attrs(attr1='dog')
def name():
return 'name'
print(name.attr1)
print(name.attr2)
В цикле после определения функции
wrapper
, этой функции присваивается несколько атрибутов.
print(name.attr1)
и
print(name.attr2)
отрабатывают и выводят присвоенные атрибуты. Но ведь мы даже не вызывали функцию name, мы просто определили функцию и декоратор. Получается вот эта запись с собачкой исполняется интерпретатором и происходит присвоение новых атрибутов даже без вызова функции?