Bestimmen Sie in Python zur Laufzeit, ob es sich bei einem Objekt um eine Klasseninstanz (alter und neuer Typ) handelt
Ich versuche, einen tief verschachtelten Satz von Klassen, Attributen, gebundenen Methoden usw. in eine HDF5-Datei zu schreiben, indem ich das h5py-Modul für die Langzeitspeicherung verwende. Ich bin sehr nah dran. Der einzige Fehler, den ich scheinbar nicht beheben kann, besteht darin, zur Laufzeit programmgesteuert herauszufinden, ob es sich um einen Klasseninstanztyp handelt, und nicht um eine Liste, ein Int usw., in die ich zurückkehren muss Die Klasseninstanz sollte sich aber offensichtlich nicht in ein int, float usw. verwandeln. Dies muss sowohl für Klassen alten als auch für Klassen neuen Stils funktionieren. Dinge, die ich erforscht habe, die nicht funktionieren / die ich nicht zur Arbeit bringen kann:
Verwenden des Inspect-Moduls
>>> class R(object): pass
...
>>> _R = R()
>>> import inspect
>>> inspect.isclass(_R)
False
>>> inspect.isclass(R)
True
Das ist nicht hilfreich, ich brauche eine Funktion wieinspect.isclassinstance(_R)
zurückgebenTrue
Verwenden des Types-Moduls
Wenn Sie Klassen im alten Stil verwenden, gibt es einen Typ namens InstanceType, der Instanzen von Klassen im alten Stil wie im folgenden Code entspricht
>>> import types
>>> class R(): pass #old-style class
...
>>> _R = R()
>>> import types
>>> type(_R) is types.InstanceType
True
>>> class R(object): pass #new-style class
...
>>> _R = R()
>>> type(_R) is types.InstanceType
False
Wenn Sie jedoch Klassen neuen Stils verwenden, gibt es keine entsprechende Eingabetypes