python中的简单decorator函数不起作用

2024-04-28 12:43:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在pycharm中执行以下代码。你知道吗

def auth_login(func):
    def wrapper(*args, **kwargs):
        print("Authenticating......")
        func(*args, **kwargs)
    return wrapper()


@auth_login
def login(username, password):
    print("Successfully logged in:",username)

login('setu', 'setu')

看起来很直接,但我得到以下错误: 输出:

>    Traceback (most recent call last):
>     Authenticating......
>       File "C:/Users/611834094/PycharmProjects/PractiseProject/decorators/example3.py",
> line 10, in <module>
>         @auth_login
>       File "C:/Users/611834094/PycharmProjects/PractiseProject/decorators/example3.py",
> line 7, in auth_login
>         return wrapper()
>       File "C:/Users/611834094/PycharmProjects/PractiseProject/decorators/example3.py",
> line 5, in wrapper
>         func(*args, **kwargs)
>     TypeError: login() missing 2 required positional arguments: 'username' and 'password'
>     
>     Process finished with exit code 1

Tags: indecoratorsauthdefusernameargsloginwrapper
2条回答

您正在返回wrapper的值。相反,只需返回函数。你知道吗

def auth_login(func):
    def wrapper(*args, **kwargs):
        print("Authenticating......")
        func(*args, **kwargs)
    return wrapper # Here was the issue.


@auth_login
def login(username, password):
    print("Successfully logged in:",username)

login('setu', 'setu')

在返回包装函数时移除括号

def auth_login(func):
def wrapper(*args, **kwargs):
    print("Authenticating......")
    func(*args, **kwargs)
# Remove the brackets from wrapper
return wrapper

相关问题 更多 >