Wie überprüft man eine Variable als Klassenobjekt oder nicht [doppelt]

8

Nehmen Sie eine einfache Klasse an:

%Vor%

Meine Frage ist: Wie kann ich überprüfen, ob eine Variable ein Klassenobjekt ist?

eine einfache Lösung:

%Vor%

Aber ich denke, es gibt mindestens einen klassischen Weg, das zu überprüfen.

    
pylover 05.04.2013, 18:55
quelle

5 Antworten

12

In 2.x kann ein Klassenobjekt ein type (neue Stilklassen) oder ein classobj (klassische Klassen) sein. Der Typ type ist ein eingebauter Typ, der Typ classobj jedoch nicht. Also, wie bekommst du es? Das ist das types Modul für.

%Vor%

In 3.x müssen Sie sich keine Gedanken über klassische Klassen machen, also:

%Vor%

Auch wenn Sie die Typen direkt vergleichen möchten, sollten Sie keine Objekte mit ihrer str vergleichen. Vergleichen Sie:

%Vor%

Sie können Objekte fast immer direkt vergleichen:

%Vor%

(Und in den unglaublich seltenen Fällen, in denen Sie wirklich aus irgendeinem Grund die Zeichenfolgendarstellung vergleichen müssen, möchten Sie repr , nicht str .)

    
abarnert 05.04.2013, 19:00
quelle
23

Verwenden Sie inspizieren :

%Vor%     
Jochen Ritzel 05.04.2013 19:07
quelle
3

Suchen Sie das?

%Vor%

Aber funktioniert nur für Klassen, die von Objekt geerbt wurden.

    
Piotr Hajduga 05.04.2013 18:58
quelle
2

Eine neue Stilklasse (die explizit von object wie in Ihrem Beispiel oder implizit in Python 3 abgeleitet wurde) hat nicht den Typ classobj . Nur Klassen im alten Stil sind classobj s. Also könnten Sie für Ihre Beispielklasse, wie sie geschrieben wurde, einfach überprüfen, ob MyClass eine Instanz von type ist, da alle neuen Stilklassen:

sind %Vor%

Da alle neuen Stilklassen von object abgeleitet sind, können Sie auch Folgendes tun:

%Vor%

Ich würde davon abraten:

%Vor%

Dies schlägt fehl, wenn der Typ einer Klasse nicht type ist, sondern eine Metaklasse. Obwohl es dafür natürlich Anwendungsfälle geben kann.

Wenn Sie wirklich sehen müssen, ob Sie eine Old-Style-Klasse haben, können Sie das types -Modul importieren und types.ClassType verwenden, oder einfach nur eine alte Klasse deklarieren und sehen, ob Sie die Klasse sind Tests sind vom gleichen Typ:

%Vor%     
kindall 05.04.2013 19:06
quelle
-1

Manchmal funktioniert der nächste (wenn Sie festlegen möchten, wie das Objekt gedruckt wird):

%Vor%     
sergzach 19.02.2016 17:39
quelle

Tags und Links