【问题标题】:Change value of decorator parameter variable in python在python中更改装饰器参数变量的值
【发布时间】:2023-04-04 12:42:01
【问题描述】:

我有以下代码,其中默认的“用户”值为无,并且由装饰器“need_authentication”采用,情况是我更改了用户值,但当我调用装饰器时,它总是得到无。我现在用户变量不是“无”,因为我在调用 show_content 之前打印它
这是我的代码:

import user

User = None

def login():
    #In this function, I change User value


@user.need_authentication(actual_user=User)
def show_content():
    print('contenido')

login()
show_content():
    print("content")

这是我的装饰器:

def need_authentication(actual_user = None):
    def decorator(func):
        def check_authentication(*args, **kwargs):
            print(app.User)
            print(user)
            if user == None:
                print("lo siento, necesita registrarse para acceder al contenido")
            else:
                func(*args, **kwargs)

        return check_authentication

    return decorator

【问题讨论】:

  • 函数参数的默认值是在定义函数时计算的,而不是在调用函数时计算的。
  • 装饰器中actual_user在哪里使用?
  • 当你使用装饰器时,你在定义函数时调用了装饰器函数。它使用当时User 的值创建装饰函数,它不会推迟到函数被调用时。
  • 如果你需要引用动态的东西,参数应该是一个全局对象,它的状态可以动态改变。请参阅此处的基于类的装饰器部分:scottlobdell.me/2015/04/decorators-arguments-python

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