Wie zu identifizieren, ob eine Variable eine Klasse oder ein Objekt ist

Ich arbeite an einer etwas niedrigeren Ebene, die ein kleines Framework für die Erstellung von Testvorrichtungen für mein Projekt in Python schreibt. Hier möchte ich herausfinden, ob eine bestimmte Variable eine Instanz einer bestimmten Klasse oder einer Klasse selbst ist und wenn es eine Klasse ist, möchte ich wissen, ob es sich um eine Unterklasse einer bestimmten Klasse handelt, die durch mein Framework definiert ist. Wie mache ich es?

class MyBase(object): pass class A(MyBase): a1 = 'Val1' a2 = 'Val2' class B(MyBase): a1 = 'Val3' a2 = A 

Ich möchte herausfinden, ob die Eigenschaften a1 und a2 Instanzen einer Klasse / Typ sind (a1 ist ein String-Typ in B) oder ein Klassenobjekt selbst (dh a2 ist A in B). Kannst du mir bitte helfen, wie finde ich das heraus?

4 Solutions collect form web for “Wie zu identifizieren, ob eine Variable eine Klasse oder ein Objekt ist”

Verwenden Sie das Inspektionsmodul .

Das Inspektionsmodul bietet mehrere nützliche Funktionen, um Informationen über Live-Objekte wie Module, Klassen, Methoden, Funktionen, Tracebacks, Frame-Objekte und Code-Objekte zu erhalten. Zum Beispiel kann es Ihnen helfen, den Inhalt einer Klasse zu untersuchen, den Quellcode einer Methode abzurufen, die Argumentliste für eine Funktion zu extrahieren und zu formatieren oder alle Informationen zu erhalten, die Sie benötigen, um eine detaillierte Rückverfolgung anzuzeigen.

Beispielsweise gibt die Funktion inspect.isclass() true zurück, wenn das Objekt eine Klasse ist:

 >>> import inspect >>> inspect.isclass(inspect) False >>> inspect.isclass(inspect.ArgInfo) True >>> 

Use isinstance und type , types.ClassType (letzteres ist für Old-Style-Klassen):

 >>> isinstance(int, type) True >>> isinstance(1, type) False 

Verwenden Sie die Funktion type() . Es wird den Typ des Objekts zurückgeben. Sie können "Bestands" -Typen aus der Typenbibliothek anpassen. Old-Style-Klassen (die nicht von irgendetwas erben) haben die type types.ClassType . types.TypeType Klassen wie in deinem Beispiel haben die type types.TypeType . Es gibt viele andere nützliche Typen in diesem Modul für Strings und so.

Der Aufruf von type() auf einer Instanz einer types.InstanceType Klasse gibt types.InstanceType . Das Aufrufen einer Instanz einer neuartigen Klasse gibt die Klasse selbst zurück.

Benutzungstyp ()

 >>> class A: pass >>> print type(A) <type 'classobj'> >>> A = "abc" >>> print type(A) <type 'str'> 
Python ist die beste Programmiersprache der Welt.