Wie kann man überprüfen, ob eine Variable eine Klasse ist oder nicht?

Ich habe mich gefragt, wie man prüft, ob eine Variable eine Klasse ist (keine Instanz!) Oder nicht.

Ich habe versucht, die Funktion isinstance(object, class_or_type_or_tuple) zu verwenden, um dies zu tun, aber ich weiß nicht, welche Art eine Klasse haben wird.

Zum Beispiel im folgenden Code

 class Foo: pass isinstance(Foo, **???**) # i want to make this return True. 

Ich habe versucht, " class " zu ersetzen mit ??? , Aber ich erkannte, dass class ein Schlüsselwort in Python ist.

7 Solutions collect form web for “Wie kann man überprüfen, ob eine Variable eine Klasse ist oder nicht?”

Noch besser: Verwenden Sie die Funktion inspect.isclass .

 >>> import inspect >>> class X(object): ... pass ... >>> inspect.isclass(X) True >>> x = X() >>> isinstance(x, X) True >>> y = 25 >>> isinstance(y, X) False 

Die Inspektion ist wahrscheinlich die beste Lösung, und es ist wirklich leicht zu sehen, wie es tatsächlich umgesetzt wird

 def isclass(object): """Return true if the object is a class. Class objects provide these attributes: __doc__ documentation string __module__ name of module in which this class was defined""" return isinstance(object, (type, types.ClassType)) 
 >>> class X(object): ... pass ... >>> type(X) <type 'type'> >>> isinstance(X,type) True 
 isinstance(X, type) 

Rückkehr True wenn X Klasse ist und False wenn nicht.

Klasse Foo: heißt alte Stilklasse und Klasse X (Objekt): heißt neue Stilklasse.

Überprüfen Sie, was ist der Unterschied zwischen alten Stil und neue Stil Klassen in Python? . Neue Art wird empfohlen. Lesen Sie mehr über " vereinheitlichen Typen und Klassen "

Das ist ein wenig hackish, aber eine Option, wenn du keine Importe vermeiden willst:

 def isclass(obj): try: issubclass(obj, object) except TypeError: return False else: return True 

Es gibt hier schon einige Arbeitslösungen, aber hier noch eine:

 >>> import types >>> class Dummy: pass >>> type(Dummy) is types.ClassType True 
  • Pythonreflexion - Kann ich das verwenden, um den Quellcode einer Methodendefinition zu erhalten
  • Wie unterscheide ich zwischen einer Funktion und einer Klassenmethode?
  • Wie kann man über die Attribute einer Klasse in der Reihenfolge, in der sie definiert wurden, iterieren?
  • Python ist die beste Programmiersprache der Welt.