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
相似问题