Étant donné une classe Foo
(que ce soit une classe de style nouveau ou non), comment générer toutes les classes de base - n'importe où dans la hiérarchie d'héritage - issubclass
de?
python
class
inheritance
oop
introspection
Sridhar Ratnakumar
la source
la source
inspect.getmro(obj)
au lieu deinspect.getmro(type(obj))
.Voir la
__bases__
propriété disponible sur un pythonclass
, qui contient un tuple des classes de base:la source
getmro
dit explicitement "Aucune classe n'apparaît plus d'une fois dans ce tuple"?__bases__
ne monte que d' un niveau . (Comme votre utilitaire récursif l'indique, mais un coup d'œil rapide sur l'exemple pourrait ne pas comprendre cela.)inspect.getclasstree()
créera une liste imbriquée de classes et de leurs bases. Usage:la source
python -c 'import inspect; from pprint import pprint as pp; pp(inspect.getclasstree(inspect.getmro(IOError)))'
vous pouvez utiliser le
__bases__
tuple de l'objet de classe:Le tuple retourné par
__bases__
a toutes ses classes de base.J'espère que ça aide!
la source
__bases__
attention, en python 3.x, chaque classe hérite de la classe d'objet de base.
la source
Selon la documentation Python , nous pouvons également simplement utiliser un
class.__mro__
attribut ou uneclass.mro()
méthode:la source
Bien que la réponse de Jochen soit très utile et correcte, comme vous pouvez obtenir la hiérarchie des classes en utilisant la méthode .getmro () du module inspect, il est également important de souligner que la hiérarchie d'héritage de Python est la suivante:
ex:
Une classe héritière
ex:
Une classe héritée
Une classe peut hériter d'une autre - La classe 'attribuée est héritée - en particulier, ses méthodes sont héritées - cela signifie que les instances d'une classe (enfant) héritière peuvent accéder à l'attribut de la classe (parent) héritée
instance -> classe -> classes héritées
en utilisant
vous montrera la hiérarchie, dans Python.
la source