@Shpindel_t_800

Как работает этот декоратор?

Привет немного непонятна работа декораторов. А конкретно как отрабатывает этот код:
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, мы просто определили функцию и декоратор. Получается вот эта запись с собачкой исполняется интерпретатором и происходит присвоение новых атрибутов даже без вызова функции?
  • Вопрос задан
  • 91 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы