[英]get class name in decorator python 2.7
如何使用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__的类似解决方案,但我都没有。
您可以只分析方法的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
,则必须将其转换为classmethod
,以便能够获取具有可用类信息的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.