【发布时间】:2017-04-15 23:14:19
【问题描述】:
所以我有这个代码:
def collect_input(func):
"""
A decorator which adds an all_input attribute to the wrapped function.
This attribute collects any input passed to the function.
"""
def wrapper(*args, **kwargs):
wrapper.all_input.append(*args)
return func(*args, **kwargs)
wrapper.all_input = []
return wrapper
@collect_input
def foo(bar):
print('in foo')
foo(5)
foo('spam')
print(foo.all_input)
我的问题是:如果foo.all_input 是在collect_input 范围内声明的,为什么你可以访问它?
【问题讨论】:
-
实际上,你访问的不是
foo.all_input,而是wrapper.all_input,因为你已经用一个返回wrapper函数的装饰器包装了你的函数。
标签: python function scope attributes decorator