Abrufen des Klassennamens einer Instanz in Python
Wie finde ich einen Namen von Klasse, erstellt eine Instanz eines Objekts in Python, wenn die Funktion " ich bin dabei aus der Basis-Klasse, von der die Klasse der Instanz abgeleitet wurde?
Dachte, vielleicht die inspect-Modul könnte mir geholfen haben hier, aber es scheint nicht, um mir zu geben was ich will. Und kurze Analyse der __class__
Mitglied, ich bin mir nicht sicher, wie man an diese Informationen.
InformationsquelleAutor der Frage Dan | 2009-02-04
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie versucht, die
__name__
Attribut der Klasse? ietype(x).__name__
geben Sie den Namen der Klasse, die ich denke, ist, was Sie wollen.Diese Methode funktioniert mit new-style-Klassen nur. Ihr code vielleicht auch ein paar old-style-Klassen. Die folgenden Werke für beide:
InformationsquelleAutor der Antwort sykora
Wollen Sie den Namen der Klasse als string?
InformationsquelleAutor der Antwort truppo
geben() ?
InformationsquelleAutor der Antwort GHZ
Dem Beispiel-code oben (beim Eingang in den interaktiven interpreter) produzieren
'__main__.A'
im Gegensatz zu'A'
die produziert wird, wenn die__name__
- Attribut aufgerufen. Indem Sie einfach übergeben das Ergebnis vonA.__class__
zu denstr
Konstruktor die Analyse ist für Sie verarbeitet. Sie könnten jedoch auch den folgenden code verwenden, wenn Sie möchten, etwas expliziter.Dieses Verhalten kann vorteilhaft sein, wenn Sie Klassen mit dem gleichen Namen definiert, die in separaten Modulen.
Der Beispielcode oben getestet wurde in Python 2.7.5.
InformationsquelleAutor der Antwort Jonathan
Beispiel:
InformationsquelleAutor der Antwort Prasath
Gute Frage.
Hier ist ein einfaches Beispiel, basierend auf GHZ ist, das könnte jemand helfen:
InformationsquelleAutor der Antwort RyanN
Abgesehen von der Ergreifung der besonderen
__name__
Attribut, finden Sie vielleicht selbst in der Notwendigkeit der qualifizierte Namen für eine bestimmte Klasse/Funktion. Dies geschieht, indem Sie die Arten__qualname__
.In den meisten Fällen, diese werden genau das gleiche, aber, wenn der Umgang mit geschachtelten Klassen/Methoden, diese unterscheiden sich in der Ausgabe, die Sie erhalten. Zum Beispiel:
Seit Introspektion ist das, was Sie sind nach, dieser ist immer möchten Sie vielleicht zu prüfen.
InformationsquelleAutor der Antwort Jim Fasarakis Hilliard
Alternativ können Sie die
classmethod
decorator:Nutzung:
InformationsquelleAutor der Antwort Yurii Rabeshko