2009-05-19 10 views
13

J'ai une fonction qui accepte une classe (pas une instance) et, selon qu'il s'agit d'une classe spécifique ou d'une sous-classe de, je dois passer dans l'une des deux autres fonctions d'usine (tierces).Comment savoir si une classe descend d'une autre classe

(Pour prévenir toute objection, je suis conscient que ce n'est pas très Pythonic, mais je suis dépendant de ce que la bibliothèque tiers accepte.)

issubclass ne fonctionne que pour les instances, pas de classe objets eux-mêmes. Je suppose que je pourrais instancier la classe, faire issubclass et jeter l'instance, mais cela semble un peu inutile.

Voici ce que je fais en ce moment, en me basant sur l'attribut intégré mro pour savoir si une certaine classe est dans la liste des ancêtres de ma classe. Est-ce sûr, et y a-t-il une meilleure façon de le faire?

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

Répondre

28

issubclass ne fonctionne que pour les instances, pas de classe objets eux-mêmes.

Il fonctionne bien pour moi:

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

Aargh, je prêtaient à confusion avec isinstance. Merci. –

Questions connexes