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?

  • Gibt es eine Standardmethode, um XY-Daten in Python zu speichern?
  • Python Memory Error beim Ierieren zu einem großen Bereich
  • Parsing eines Ad-hoc-Baums
  • Brechen von String in mehrere Zeilen nach Zeichenbreite (Python)
  • Wie zähle das Auftreten bestimmter Gegenstände in einem ndarray in Python?
  • Hallo Welt in mod_wsgi
  • Warum PyQt5-Import fehlgeschlagen in Python3.4 mit `ImportError: DLL load failed` in Windows 7?
  • Kann AngularJS ng-include laden ein Jinja2 verarbeitet HTML auf FLASK?
  • 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.