¿Hay alguna manera de verificar si un parámetro contiene una clase o una instancia de clase?

StackOverflow https://stackoverflow.com/questions/1638657

  •  08-07-2019
  •  | 
  •  

Pregunta

Quiero que el contenedor my_function pueda recibir una clase o una instancia de clase, en lugar de escribir dos funciones diferentes:

>>> from module import MyClass

>>> my_function(MyClass)

True

>>> cls_inst = MyClass()

>>> my_function(cls_inst)

True

el problema es que no sé de antemano qué tipo de clases o instancias de clase voy a recibir. Entonces, por ejemplo, no puedo usar funciones como isinstance ...

¿Cómo puedo escribir check si un parámetro contiene una clase o una instancia de clase, de forma genérica?

¿Alguna idea?

¿Fue útil?

Solución

>>> class A: pass

>>> isinstance(A, type)
True
>>> isinstance(A(), type)
False

Otros consejos

import types

def myfun(maybe_class):
    if type(maybe_class) == types.ClassType:
        print "It's a class."
    else:
        print "It's an instance."

Utiliza la función buitlin type ().

Por ejemplo:

import avahi
print type(avahi)

<type 'module'>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top