Python函数装饰器应该打印完整的方法名称

时间:2016-11-03 13:37:42

标签: python python-3.x decorator introspection

以下有用的装饰器测量函数的执行时间。它还会打印函数的名称。但是,如果函数是一个方法,它也可以打印类名。获得完整方法名称la Class.method的简洁方法是什么?

import time

def timeit(f):

    def timed(*args, **kw):

        ts = time.time()
        result = f(*args, **kw)
        te = time.time()

        print('func:%r args:[%r, %r] took: %2.4f sec' % (f.__name__, args, kw, te-ts))
        return result

    return timed

2 个答案:

答案 0 :(得分:4)

.__qualname__怎么样?

In [1]: class MyClass(object):
   ...:     def my_method(self):
   ...:         pass
   ...:

In [2]: MyClass.my_method.__qualname__
Out[2]: 'MyClass.my_method'

答案 1 :(得分:1)

可能有更好的方法,但在Python 2中(没有__qualname__)你可以使用

m.im_class.__name__

,如

>>> class MyClass(object):
...   def foo(self):
...      pass
... 
>>> m = MyClass.foo
>>> print m.im_class.__name__ + '.' + m.__name__
MyClass.foo