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.
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:
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
.)
Suchen Sie das?
%Vor%Aber funktioniert nur für Klassen, die von Objekt geerbt wurden.
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:
Da alle neuen Stilklassen von object
abgeleitet sind, können Sie auch Folgendes tun:
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:
Tags und Links python class python-2.7