J'aimerais pouvoir parcourir toutes les classes de base, directes et indirectes, d'une classe donnée, y compris la classe elle-même. Ceci est utile dans le cas où vous avez une métaclasse qui examine une classe Options interne de toutes ses bases.Existe-t-il une fonction standard pour itérer sur les classes de base?
Pour ce faire, j'écrit ce qui suit:
def bases(cls):
yield cls
for direct_base in cls.__bases__:
for base in bases(direct_base):
yield base
Y at-il une fonction standard de le faire pour moi?
Ceci a l'inconvénient (discutable) de ne pas fonctionner avec des classes de style ancien. 'inspect.getmro' renvoie' cls .__ mro__' s'il est présent (sur les nouvelles classes de style) et effectue une recherche personnalisée si ce n'est pas le cas. (Fait amusant: Vous pouvez générer une erreur de récurrence en créant une ancienne hiérarchie de classe de style avec plus de classes que la profondeur de récursivité maximale et en appelant 'getmro') – aaronasterling