【发布时间】: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
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在python中更改装饰器参数变量的值 - Python技术站