Maison > Article > développement back-end > Comment puis-je trouver toutes les sous-classes d’une classe Python ?
Accès aux sous-classes d'une classe
En Python, trouver toutes les sous-classes d'une classe donnée peut être obtenu grâce à la méthode __subclasses__. Cette méthode est disponible pour les classes de nouveau style (celles héritant d'un objet dans Python 3 ou sous-classées d'une classe de nouveau style).
Par exemple, considérons le code suivant :
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass
Pour récupérer les sous-classes de Foo, on peut utiliser le code suivant :
print([cls.__name__ for cls in Foo.__subclasses__()])
Cela affichera les noms des sous-classes :
['Bar', 'Baz']
Nous pouvons également obtenir les sous-classes elles-mêmes en utilisant __subclasses__() :
print(Foo.__subclasses__())
Cela affichera la liste de sous-classes suivante :
[<class '__main__.Bar'>, <class '__main__.Baz'>]
Pour confirmer que ces sous-classes ont bien Foo comme classe de base, nous pouvons utiliser ce qui suit code :
for cls in Foo.__subclasses__(): print(cls.__base__)
Cela affichera ce qui suit :
<class '__main__.Foo'> <class '__main__.Foo'>
Cependant, il convient de noter que si la définition de classe d'une sous-classe n'a pas encore été exécutée, elle ne le sera pas trouvé par __subclasses__. Pour tenir compte de cela, la récursivité peut être utilisée :
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)]) print(all_subclasses(Foo))
Cela affichera :
{<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!