2009-05-19 21 views
13

Tengo una función que acepta una clase (no una instancia) y, dependiendo de si es una clase específica o una subclase de esa, necesito pasarla en una de las otras dos funciones de fábrica (de terceros).Cómo saber si una clase desciende de otra clase

(Para anticipar las posibles objeciones, soy consciente de que esto no es muy Pythonic, pero estoy depende de lo que acepta la biblioteca de terceros.)

issubclass sólo funciona para las instancias, los objetos mismos no clase. Supongo que podría crear una instancia de la clase, haga issubclass y deseche la instancia, pero eso parece un desperdicio.

Esto es lo que estoy haciendo en este momento, confiando en el atributo incorporado mro para decir si una cierta clase está en la lista de antepasados ​​de mi clase. ¿Es esto seguro y hay alguna forma mejor de hacerlo?

if GenericClass in myclass.__mro__: 
    result = generic_factory(myclass) 
else: 
    result = other_factory(myclass) 

Respuesta

28

issubclass sólo funciona para las instancias, los objetos mismos no clase.

Funciona bien para mí:

>>> class test(object):pass 
... 
>>> issubclass(test,object) 
True 
+0

Aargh, que se confundiéndolo con isinstance. Gracias. –

Cuestiones relacionadas