2009-05-19 12 views
13

Ho una funzione che accetta una classe (non un'istanza) e, a seconda che si tratti di una classe specifica o di una sottoclasse di tale, devo passare in una delle due altre funzioni di fabbrica (di terze parti).Come sapere se una classe discende da un'altra classe

(per prevenire eventuali obiezioni, sono consapevole questo non è molto Pythonic, ma io sono dipendente da ciò che la libreria di terze parti accetta.)

issubclass funziona solo per le istanze, si sono oggetti, non di classe. Suppongo di poter istanziare la classe, fare issubclass e buttare via l'istanza, ma sembra un po 'dispendiosa.

Ecco cosa sto facendo al momento, basandosi sull'attributo mro attributo per dire se una certa classe è nella lista degli antenati della mia classe. È sicuro, e c'è un modo migliore di farlo?

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

risposta

28

issubclass funziona solo per le istanze, si sono oggetti, non di classe.

Funziona bene per me:

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

Aargh, mi era confusa con isinstance. Grazie. –

Problemi correlati