Задать вопрос
old_stalin
@old_stalin

Как правильно реализовать декоратор?

class Test:
    def creat_role(self,ctx):
        print("ctreate_role")
        loading_bar(self.update_mute(ctx), ctx)
        
    def update_mute(self, ctx):
        print(f"update_mute {ctx}")
        

def loading_bar(func, ctx):
    print("loading_bar")

    def decorator():
        print("decorator")
        func()
        for i in range(1, 6):
            print("finish")
    return decorator

if __name__ == "__main__":
    Test().creat_role(123)


он каким то боком выводит
ctreate_role
update_mute 123
loading_bar

хотя должен:
ctreate_role
loading_bar
decorator
update_mute 123
finish x6
  • Вопрос задан
  • 152 просмотра
Подписаться 1 Простой 19 комментариев
Помогут разобраться в теме Все курсы
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillfactory
    Профессия Python-разработчик
    9 месяцев
    Далее
  • Нетология
    Fullstack-разработчик на Python + нейросети
    20 месяцев
    Далее
Решения вопроса 1
@Drill
class Test:
    def creat_role(self,ctx):
        print("ctreate_role")
        loading_bar(self.update_mute)(ctx)
#        self.update_mute(ctx)

#    @loading_bar
    def update_mute(self, ctx):
        print(f"update_mute {ctx}")


def loading_bar(func):
    print("loading_bar")

    def decorator(*args, **kwargs):
        print("decorator")
        func(*args, **kwargs)
        for i in range(1, 6):
            print("finish")
    return decorator


Или закомментировать строку loading_bar(self.update_mute)(ctx), а
#        self.update_mute(ctx)

#    @loading_bar
раскомментировать
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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