2016-06-01 19 views
5

Come posso ottenere il nome della classe compreso il percorso completo dalla sua radice del modulo? Per Python 3.3 e versioni successive?Ottieni il nome completo di una classe Python (Python 3.3+)

Ecco esempio di codice Python:

class A: 
    class B: 
     class C: 
      def me(self): 
       print(self.__module__) 
       print(type(self).__name__) 
       print(repr(self)) 

x = A.B.C() 
x.me() 

Questo codice mi uscite su Python 3.3:

__main__ 
C 
<__main__.A.B.C object at 0x0000000002A47278> 

Quindi, Python sa internamente che il mio oggetto è __main__.A.B.C, ma come posso ottenere questo di programmazione? Posso analizzare repr(self), ma suona come un hack per me.

+1

Eventuali duplicati di http://stackoverflow.com/questions/1401661/python-list-all-base-classes-in-a -hierarchy-of-given-class si prega di guardare lì per informazioni di utilizzo tramite l'attributo '__bases__' e' inspect'module l'ordine di risoluzione dei metodi ('mro') è anche informazioni interessanti oltre alla" visualizzazione "della catena di ereditarietà formale. Poiché questa regola quale metodo (nel caso in cui siano offerti multipli) sarà scelto come una gerarchia efficace. – Dilettant

+1

Controllare l'attributo ['__qualname__'] (https://docs.python.org/3/whatsnew/3.3.html#pep-3155-qualified-name-for-classes-and-functions). –

risposta

5

Siete alla ricerca di __qualname__ (introdotto in Python 3.3):

class A: 
    class B: 
     class C: 
      def me(self): 
       print(self.__module__) 
       print(type(self).__name__) 
       print(type(self).__qualname__) 
       print(repr(self)) 
+0

D'oh. Ho cercato questo attributo e ho provato a trovarlo usando IPython, ma il completamento delle schede non lo mostrava affatto. Non so perché. – bialix