1936 Stimmen

Abrufen des Klassennamens einer Instanz?

Wie finde ich einen Namen der Klasse, die eine Instanz eines Objekts in Python erstellt, wenn die Funktion, die ich tue dies aus ist die Basisklasse, von der die Klasse der Instanz abgeleitet wurde?

Ich dachte, vielleicht das Inspektionsmodul hätte mir hier vielleicht helfen können, aber es scheint mir nicht das zu geben, was ich will. Und kurz vor dem Parsen der __class__ Mitglied, bin ich mir nicht sicher, wie ich an diese Informationen herankomme.

24voto

Yurii Rabeshko Punkte 543

Alternativ können Sie auch die classmethod Dekorateur:

class A:
    @classmethod
    def get_classname(cls):
        return cls.__name__

    def use_classname(self):
        return self.get_classname()

Verwendung :

>>> A.get_classname()
'A'
>>> a = A()
>>> a.get_classname()
'A'
>>> a.use_classname()
'A'

16voto

RyanN Punkte 730

Gute Frage.

Hier ist ein einfaches Beispiel auf der Grundlage von GHZ, das jemandem helfen könnte:

>>> class person(object):
        def init(self,name):
            self.name=name
        def info(self)
            print "My name is {0}, I am a {1}".format(self.name,self.__class__.__name__)
>>> bob = person(name='Robert')
>>> bob.info()
My name is Robert, I am a person

16voto

Neben der Ergreifung des besonderen __name__ Attribut, benötigen Sie möglicherweise das qualifizierter Name für eine bestimmte Klasse/Funktion. Dies geschieht, indem die Typen __qualname__ .

In den meisten Fällen sind diese genau gleich, aber wenn es um verschachtelte Klassen/Methoden geht, unterscheiden sie sich in der Ausgabe, die Sie erhalten. Zum Beispiel:

class Spam:
    def meth(self):
        pass
    class Bar:
        pass

>>> s = Spam()
>>> type(s).__name__ 
'Spam'
>>> type(s).__qualname__
'Spam'
>>> type(s).Bar.__name__       # type not needed here
'Bar'
>>> type(s).Bar.__qualname__   # type not needed here 
'Spam.Bar'
>>> type(s).meth.__name__
'meth'
>>> type(s).meth.__qualname__
'Spam.meth'

Da es Ihnen um Selbstbeobachtung geht, sollten Sie dies immer in Betracht ziehen.

11voto

Lalit Vavdara Punkte 198

Sie können einfach Folgendes verwenden __qualname__ der für den qualifizierten Namen einer Funktion oder Klasse steht

Beispiel:

>>> class C:
...     class D:
...         def meth(self):
...             pass
...
>>> C.__qualname__
'C'
>>> C.D.__qualname__
'C.D'
>>> C.D.meth.__qualname__
'C.D.meth'

Link zur Dokumentation qualname

7voto

v.babak Punkte 668

Um den Klassennamen der Instanz zu erhalten:

type(instance).__name__

ou

instance.__class__.__name__

beide sind gleich

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X