9-5给wrapper添加属性ncalls为什么可以被里面调用
来源:9-5 如何在类中定义装饰器
Brook_StudyMachine
2017-01-30
def info(self, func):
def wrapper(*args, **kargs):
wrapper.ncalls += 1
lt = localtime()
start = time()
res = func(*args, **kargs)
used = time() - start
info = {}
info['func'] = func.__name__
info['time'] = strftime('%x %X', lt)
info['used'] = used
info['ncalls'] = wrapper.ncalls
msg = self.formatter % info
self.log.info(msg)
return res
wrapper.ncalls = 0
return wrapper开始我以为wrapper.ncalls在info里,是info的一个局部变量
改写为wrapper_ncalls是报错的
把wrapper.ncalls放在def wrapper前面,也会报错
不明白为什么wrapper里面,可以调用外面声明的wrapper.ncalls
写回答
1回答
-
程序员硕
2017-02-03
wrapper.ncalls是函数对象的属性, 和其他实例属性一样的.
00
相似问题