2016-06-01 10 views
5

Wie kann ich den Namen der Klasse einschließlich des vollständigen Pfads von der Modulwurzel erhalten? Für Python 3.3 und höher?Erhalte den vollständig qualifizierten Namen einer Python-Klasse (Python 3.3+)

Hier ist Beispiel für Python-Code:

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() 

Dieser Code gibt mir auf Python 3.3:

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

also intern Python weiß, dass mein Objekt ist __main__.A.B.C, aber wie kann ich das bekommen programmatisch? Ich kann repr(self) analysieren, aber es klingt wie ein Hack für mich.

+1

Mögliche Duplikat http://stackoverflow.com/questions/1401661/python-list-all-base-classes-in-a -hierarchy-of-given-class Bitte schauen Sie dort nach Verwendungsinformationen über das '__bases__' Attribut und' inspect'Modul Angebote Die Methodenauflösungsreihenfolge ('mro') ist neben der formalen Vererbungskette" display "auch eine interessante Information. Da diese Regeln festlegen, welche Methode (falls mehrere angeboten werden) als eine effektive Hierarchie ausgewählt wird. – Dilettant

+1

Überprüfen Sie das Attribut ['__qualname__'] (https://docs.python.org/3/whatsnew/3.3.html#pep-3155-qualified-name-for-classes-and-functions). –

Antwort

5

Sie suchen __qualname__ (eingeführt 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. Ich habe nach diesem Attribut gesucht und versucht, es mit IPython zu finden, aber die Vervollständigung der Registerkarte hat es überhaupt nicht angezeigt. Nicht sicher warum. – bialix

Verwandte Themen