Liste de toutes les classes de base dans une hiérarchie de classe donnée?
Donné une classe Foo
(si c'est un nouveau style classe ou pas), comment pouvez-vous générer tous les classes de base - n'importe où dans la hiérarchie d'héritage - il issubclass
de?
Vous devez vous connecter pour publier un commentaire.
inspecter.getmro(cls)
fonctionne pour les nouvelles et les anciennes classes de style et retourne la même queNewClass.mro()
: une liste de la classe et l'ensemble de son ancêtre classes, dans l'ordre utilisé pour la méthode de résolution.inspect.getmro(obj)
au lieu deinspect.getmro(type(obj))
.Voir le
__assiettes__
de la propriété disponible sur un pythonclass
, qui contient un n-uplet des bases de classes:getmro
explicitement dit "Pas de classe apparaît plus d'une fois dans ce n-uplet"?__bases__
ne va que jusqu'à un niveau. (En tant que votre récursive d'utilité implique, mais un rapide coup d'œil à l'exemple pourrait pas revenir sur ça.)inspect.getclasstree()
permettra de créer une liste imbriquée des classes et de leurs bases.Utilisation:
python -c 'import inspect; from pprint import pprint as pp; pp(inspect.getclasstree(inspect.getmro(IOError)))'
vous pouvez utiliser le
__bases__
tuple de la classe de l'objet:Le tuple retourné par
__bases__
a toutes ses classes de base.Espère que cela aide!
Bien que Jochen la réponse est très utile et juste, que vous pouvez obtenir de la hiérarchie de classe en utilisant le .getmro() la méthode de l'inspecter module, il est également important de souligner que Python hiérarchie d'héritage est comme suit:
ex:
Une classe qui hérite
ex:
Une classe héritée
Une classe peut hériter d'une autre
- La classe " attribué sont hérités
- en particulier, ses méthodes sont héritées
ce qui signifie que les instances d'une hériter (l'enfant) de la classe peuvent accéder attribué héréditaires (parent) classe
exemple -> classe -> puis les classes héritées
à l'aide de
va vous montrer la hiérarchie, au sein de Python.
attention que dans python 3.x chaque classe hérite de l'objet de base de la classe.
Selon la Python doc, on peut aussi simplement utiliser des
class.__mro__
attribut ouclass.mro()
méthode: