我使用的是python3.5,我试图用Python decorator打印函数调用的数量。下面是我的例子:
import inspect
def logWrapper(func):
def wrapper_func(self, *args, **kwargs):
wrapper_func.calls += 1
self.logger.info('Func: {}' .format(func.__name__) )
return func(self, *args, **kwargs)
wrapper_func.calls=0
return wrapper_func
class A:
__init__(self):
print('created')
@logWrapper
def myfunction1(self, var1):
print('var1: {}' .format(var1))
@logWrapper
def myfunction2(self, var2):
print('var2: {}' .format(var2))
if __name__ == "__main__":
Pal1=A()
Pal1.myfunction1('1')
Pal1.myfunction1('2')
Pal1.myfunction1('3')
Pal1.myfunction2('A')
function_list=inspect.getmembers(Pal1, predicate=inspect.ismethod)
for func in function_list:
method_to_call = getattr(A, func[0])
print( 'Function: {}; Calls: {}' .format(func[0], method_to_call.calls))
当我调用Pal1.myfunction1.calls
和Pal1.myfunction2.calls
时,我得到了正确的结果3和1。但是现在我喜欢迭代抛出类A的每个函数。当我尝试Pal1.func[0].calls
时,我得到了错误消息*** AttributeError: 'A' object has no attribute 'func'
,我也尝试了A.method_to_call.calls
,得到了相同的结果
我做错了什么
问题是您将实例方法作为类方法调用
例如,你不能打电话
不管你怎么打
当这被翻译成
getattr
语法时,您的代码就变成相关问题 更多 >
编程相关推荐