为什么python装饰器会引发递归错误?

时间:2020-09-26 17:43:38

标签: python python-3.x python-decorators

def greet_decorator(print_name_function): # Decorating a function
        def wrapper():
            #function as an object
            hello_name()
            print('\tMr. Sunshine')
            
            
        return wrapper
    #my_obj = greet_decorator(hello_name)
    #my_obj()

当我使用Decorator Recursion Error时,任何人都可以向我详细解释这个概念

@greet_decorator
def hello_name():
    print('Hello!')
hello_name()

1 个答案:

答案 0 :(得分:2)

您使用greet_decorator装饰器将hello_name替换为功能wrapperwrapper尝试调用本身的hello_name。那是无限递归。

也许您打算调用原始(未经装饰的)函数,该函数作为参数print_name_function传入。

def greet_decorator(print_name_function):
    def wrapper():
        print_name_function()
        print('\tMr. Sunshine')
    return wrapper

@greet_decorator
def hello_name():
    print('Hello!')

hello_name()