2016-11-03 3 views
2

Der folgende nützliche Dekorator misst die Ausführungszeit einer Funktion. Es gibt auch den Namen der Funktion aus. Es wäre jedoch großartig, wenn es den Klassennamen auch drucken könnte, wenn die Funktion eine Methode ist. Was ist ein kurzer Weg, um zum vollständigen Methodennamen a la Class.method zu gelangen?Python-Funktion Dekorator sollte vollständige Methodenname drucken

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 

Antwort

4

Was ist mit .__qualname__?

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

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

nützlich verwenden können! aber nur verfügbar seit Python 3.3 https://docs.python.org/3.6/library/stdtypes.html?highlight=qualname#definition.__qualname__ – Tryph

1

Es kann eine bessere Art und Weise, aber in Python 2 (die __qualname__ nicht haben) Sie

m.im_class.__name__ 

wie in

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