Ich habe mich gefragt, wie ich überprüfen soll, ob eine Variable eine Klasse ist (keine Instanz!).
Ich habe versucht, die Funktion isinstance(object, class_or_type_or_tuple)
zu verwenden, aber ich weiß nicht, welchen Typ eine Klasse haben würde.
Zum Beispiel im folgenden Code
class Foo: pass
isinstance(Foo, **???**) # i want to make this return True.
Ich habe versucht, " class
" durch ??? zu ersetzen. , aber mir wurde klar, dass dies class
ein Schlüsselwort in Python ist.
python
reflection
jeeyoungk
quelle
quelle
inspect.isclass
,True
wenn das zu untersuchende Objekt eine Klasseninstanz ist , verwenden Sieinspect.isclass(type(Myclass()))
type(whatever)
immer ein Objekt zurück, das eine Klasse ist, daher ist diese Prüfung redundant. Wenn dies nicht der Fall wäre, gäbe es keine Möglichkeit zur Instanziierung,whatever
und daher könnten Sie die Prüfung überhaupt nicht durchführen.type(snakemake.utils)
kehren Sie zurück<class 'module'>
undinspect.isclass(snakemake.utils)
kehren dennoch zurückFalse
.snakemake.util
liegt daran, dass ein Modul keine Klasse ist?Die inspect.isclass ist wahrscheinlich die beste Lösung, und es ist wirklich leicht zu erkennen, wie sie tatsächlich implementiert ist
quelle
import types
types.ClassType
wird in Python 3 nicht mehr benötigt (und wird entfernt).In [8]: class NewStyle(object): ...: pass ...: In [9]: isinstance(NewStyle, (type, types.ClassType)) Out[9]: True
isinstance(object, type)
. Beachten Sie, dass Objekte wieint
,list
,str
usw. sind auch Klassen, so dass Sie nicht diese verwenden können , unterscheiden zwischen benutzerdefinierten Klassen definiert in Python und integrierten Klassen in C - Code definiert .quelle
'class Old:pass' 'isinstance(Old, type) == False'
, aberinspect.isclass(Old) == True
.Geben Sie
True
ifX
is class zurück undFalse
wenn nicht.quelle
S. Lott's answer
, das vier Jahre älter ist.Diese Prüfung ist sowohl mit Python 2.x als auch mit Python 3.x kompatibel.
Dies ist im Grunde eine Wrapper-Funktion, die die gleiche Prüfung wie in der Antwort von andrea_crotti durchführt.
Beispiel:
quelle
Klasse Foo: heißt alte Stilklasse und Klasse X (Objekt): heißt neue Stilklasse.
Überprüfen Sie dies Was ist der Unterschied zwischen alten und neuen Stilklassen in Python? . Neuer Stil wird empfohlen. Lesen Sie mehr über " Vereinheitlichung von Typen und Klassen "
quelle
inspect.isclass
Am einfachsten ist es, wie in der am häufigsten bewerteten Antwort angegeben zu verwenden.Die Implementierungsdetails finden Sie unter python2 inspect und python3 inspect .
für die Klasse im neuen Stil:
isinstance(object, type)
für die Klasse im alten Stil:
isinstance(object, types.ClassType)
em, für die Klasse im alten Stil
types.ClassType
wird Folgendes verwendet : Hier ist der Code von types.py :quelle
Benjamin Peterson hat Recht mit der Verwendung
inspect.isclass()
für diesen Job. Beachten Sie jedoch, dass Sie mit der integrierten Funktion issubclass testen können, ob einClass
Objekt ein bestimmtesClass
und damit implizit ein Objekt ist . Abhängig von Ihrem Anwendungsfall kann dies pythonischer sein.Class
Kann dann so verwendet werden:
quelle
Hier gibt es bereits einige funktionierende Lösungen, aber hier ist eine andere:
quelle
types.ClassType
wurde in Python 3