繁体   English   中英

在装饰器python 2.7中获取类名

[英]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__ (其中clstimed的第一个参数而不是self )获取名称。

如果它是staticmethod ,则必须将其转换为classmethod ,以便能够获取具有可用类信息的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM