En Python en tiempo de ejecución, determinar si un objeto es una instancia de clase (tipo antiguo y nuevo)
Estoy tratando de escribir un conjunto de clases, atributos, métodos enlazados, etc. profundamente anidados en un archivo HDF5 utilizando el módulo h5py para el almacenamiento a largo plazo. Estoy muy cerca. El único problema que tengo que no puedo resolver es programar, en tiempo de ejecución, encontrar una manera de determinar si algo es un tipo de instancia de clase, en lugar de una lista, int, etc. Necesito recurrir a la instancia de la clase, pero obviamente no debería incluirse en un int, float, etc. Esto debe funcionar tanto para las clases de estilo antiguo como las de estilo nuevo. Cosas que he investigado que no funcionan / no puedo trabajar:
Usando el módulo de inspección
>>> class R(object): pass
...
>>> _R = R()
>>> import inspect
>>> inspect.isclass(_R)
False
>>> inspect.isclass(R)
True
Esto no es útil, necesito una función comoinspect.isclassinstance(_R)
regresarTrue
Usando el módulo de tipos
Si usa clases de estilo antiguo, hay un tipo llamado InstanceType que coincide con las instancias de clases de estilo antiguo como se muestra en el código a continuación.
>>> 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
Pero si usa clases de nuevo estilo no hay un tipo correspondiente entypes