如何使用Python 2.7获取装饰器包装的方法类?
使用此代码:
def timeit(method):
def timed(*args, **kw):
result = method(*args, **kw)
className = ???
print '%s.%s'%(className, method.func_name)
#want printed: Test.run
return result
return timed
class Test(object):
@timeit
def run(self, ):
print 'run'
a = Test()
a.run()
我不确定要为className = ???放什么。我想要它打印Test.run。
我见过使用im_class和__ self__的类似解决方案,但我也没有。
答案 0 :(得分:4)
您可以只分析方法的function concat(a,b){
return a.concat(b);
}
concat("Foo", "bar"); //"Foobar"
参数。
self
如果它是def timeit(method):
def timed(self, *args, **kw):
result = method(self, *args, **kw)
className = type(self).__name__
print '%s.%s'%(className, method.func_name)
#want printed: Test.run
return result
return timed
class Test(object):
@timeit
def run(self):
print 'run'
a = Test()
a.run()
那么您可以使用两个装饰器(即classmethod
)并通过@classmethod @timeit
获取名称(其中cls.__name__
是第一个参数cls
代替timed
)。
如果它是self
,您必须将其变为staticmethod
才能获得具有班级信息的参数。