Maison > développement back-end > Tutoriel Python > Comment puis-je trouver toutes les sous-classes d'une classe Python ?

Comment puis-je trouver toutes les sous-classes d'une classe Python ?

Patricia Arquette
Libérer: 2024-11-17 09:50:03
original
222 Les gens l'ont consulté

How Can I Find All Subclasses of a Python Class?

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
Copier après la connexion

Pour récupérer les sous-classes de Foo, on peut utiliser le code suivant :

print([cls.__name__ for cls in Foo.__subclasses__()])
Copier après la connexion

Cela affichera les noms des sous-classes :

['Bar', 'Baz']
Copier après la connexion

Nous pouvons également obtenir les sous-classes elles-mêmes en utilisant __subclasses__() :

print(Foo.__subclasses__())
Copier après la connexion

Cela affichera la liste de sous-classes suivante :

[<class '__main__.Bar'>, <class '__main__.Baz'>]
Copier après la connexion

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__)
Copier après la connexion

Cela affichera ce qui suit :

<class '__main__.Foo'>
<class '__main__.Foo'>
Copier après la connexion

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))
Copier après la connexion

Cela affichera :

{<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal