2013-06-19 25 views
6

To właściwie 2 pytania. 1) Czy istnieje ogólny sposób, aby uzyskać nazwę klasy instancji, więc jeśli mam klasypobieranie nazwy obiektu i nazwy funkcji

class someClass(object): 

chciałbym wbudowany w sposób, który daje mi napis „SomeClass”

2) Podobne do funkcji. Jeśli mam

def someFunction(): 
    .... 
    print builtinMethodToGetFunctionNameAsString 
    return 

byłoby wydrukować „someFunction”

Powodem szukam jest to, że mam kawałek dżungli klasy i podklasy oraz debugowanie chciałbym wydrukować gdzie jestem, więc do wszystkich metod Chciałbym tylko dodać coś wzdłuż linii

print 'Executing %s from %s' %(getFunctionName,getClassName) 

więc szukam polecenia generycznych, które znają klasę i funkcję, gdzie to jest tak, że można kopiować i wklej wiersz we wszystkich metodach bez konieczności pisania oddzielnej linii f lub każdy z nich

+0

Jak o użyciu debuggera? – delnan

+0

użyj .format zamiast% 'Wykonywanie {} z {} .format (getFunctionName, getClassName) –

Odpowiedz

5

użyć atrybutu __name__:

Klasa:

>>> class A:pass 
>>> A.__name__ 
'A' 
>>> A().__class__.__name__  #using an instance of that class 
'A' 

Funkcja:

>>> def func(): 
...  print func.__name__ 
...  
>>> func.__name__ 
'func' 
>>> func() 
func 

Szybkie Hack do zajęć będą:

>>> import sys 
>>> class A(): 
...  def func(self): 
...   func_name = sys._getframe().f_code.co_name 
...   class_name = self.__class__.__name__ 
...   print 'Executing {} from {}'.format(func_name, class_name) 
...   
>>> A().func() 
Executing func from A 
+0

Dzięki Ashwini. Dla funkcji szukam sposobu na wydrukowanie nazwy bez spakowania funkcji. Zmieniono moje pytanie, aby wyjaśnić, jaki jest mój cel: – chrise

+0

@ user1734278: spójrz na moją edycję, mat, bo tego właśnie chciałeś. –

+0

Dzięki za edycję. wygląda idealnie – chrise

3

funkcja część została już odebrana pod adresem this SO post. Kod będzie:

import sys 
print sys._getframe().f_code.co_name 

Dla części klasy, należy: A.__name__ lub A().__class__.__name (dla przykładu)

+0

dzięki. wygląda jak to, czego szukałem – chrise