¿Hay alguna manera de verificar si un parámetro contiene una clase o una instancia de clase?
-
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?
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