是否可以访问decorator中的函数属性? 考虑下面这段代码。在
def deco(a):
def wrap():
print(a.status)
a()
print(a.status)
return wrap
@deco
def fun1():
fun1.status="bar"
fun1.status="foo"
fun1()
我预期输出是:
^{pr2}$但我得到以下错误:
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
fun1()
File "D:\python_projects\test_suite\func_attribute.py", line 3, in wrap
print(a.status)
AttributeError: 'function' object has no attribute 'status'
从那以后有什么办法可以让它成功吗
def fun1():
fun1.status="bar"
fun1.status="foo"
a=fun1
print(a.status)
a()
print(a.status)
输出:
^{pr2}$一如预期。在
多亏了decorator,全局名
fun1
被绑定到装饰结果,因此绑定到嵌套的wrap()
函数对象。然而,在wrap()
中,a
指的是原始的未包装函数对象。在所以有两个不同的函数对象,每个对象都有属性,它们不是相同的对象。
fun1.status
是与a.status
不同的属性。在您可以在decorator中访问与
fun1
相同的对象wrap
:演示:
^{pr2}$相关问题 更多 >
编程相关推荐