Python 函数装饰器应该打印完整的方法名称
Python function decorator should print full method name
以下有用的装饰器测量函数的执行时间。它还打印函数的名称。但是,如果函数是一个方法,它还可以打印 class 名称,那就太好了。获得完整方法名称的简洁方法是什么 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
那.__qualname__
呢?
In [1]: class MyClass(object):
...: def my_method(self):
...: pass
...:
In [2]: MyClass.my_method.__qualname__
Out[2]: 'MyClass.my_method'
可能有更好的方法,但在 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
以下有用的装饰器测量函数的执行时间。它还打印函数的名称。但是,如果函数是一个方法,它还可以打印 class 名称,那就太好了。获得完整方法名称的简洁方法是什么 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
那.__qualname__
呢?
In [1]: class MyClass(object):
...: def my_method(self):
...: pass
...:
In [2]: MyClass.my_method.__qualname__
Out[2]: 'MyClass.my_method'
可能有更好的方法,但在 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