【发布时间】:2018-02-05 16:26:35
【问题描述】:
用装饰器练习,发现这种行为很奇怪:
def test_decorator(cls, *args, **kwargs):
print (args, kwargs)
def build(*args, **kwargs):
print (args, kwargs)
return cls(*args, **kwargs)
return build
@test_decorator
class Test:
def __init__(self, *args, **kwargs):
self.args = args
self.kwargs = kwargs
t = Test(1, 2, 3, val = 4)
print (t.args, t.kwargs)
# output
# () { }
# (1, 2, 3) {'val' = 4}
# (1, 2, 3) {'val' = 4}
为什么装饰器中的第一个print 显示的是空容器?此外,如果我将build() 定义为:
def build():
return cls(*args, **kwargs)
我知道它会因为nested function scoping 而失败。我只是不确定为什么在调用build 之前它们不存在并突然返回范围。
【问题讨论】:
-
它们是要构建的参数,传递给
test_decorator的唯一内容是cls。不清楚你认为什么消失了。
标签: python python-3.x decorator