Maison  >  Article  >  développement back-end  >  Comment récupérer les sous-classes d’une classe par nom en Python ?

Comment récupérer les sous-classes d’une classe par nom en Python ?

Linda Hamilton
Linda Hamiltonoriginal
2024-11-18 09:10:02631parcourir

How to Retrieve Subclasses of a Class by Name in Python?

Recherche des sous-classes d'une classe par nom en Python

Problème :
Comment récupérer toutes les classes qui héritent d'une classe de base donnée en Python, en utilisant son nom de classe ?

Solution :

Python propose une approche élégante pour rechercher des sous-classes d'une classe spécifiée par son nom . Grâce à la méthode __subclasses__, vous pouvez récupérer directement les sous-classes d'une classe.

Explication du code :

En supposant que vous ayez une classe de base nommée Foo avec les sous-classes Bar, Baz, et Bing, l'extrait de code suivant illustre l'utilisation de __subclasses__ :

class Foo(object):
    pass

class Bar(Foo):
    pass

class Baz(Foo):
    pass

class Bing(Bar):
    pass

# Get the subclasses of Foo
foo_subclasses = Foo.__subclasses__()
print("Subclass names:", [cls.__name__ for cls in foo_subclasses])
print("Subclasses themselves:", Foo.__subclasses__())

# Validate that the subclasses inherit from Foo
for cls in Foo.__subclasses__():
    print("Base class of {}: {}".format(cls, cls.__base__))

Sortie :

Subclass names: ['Bar', 'Baz']
Subclasses themselves: [<class '__main__.Bar'>, <class '__main__.Baz'>]
Base class of <class '__main__.Bar'>: <class '__main__.Foo'>
Base class of <class '__main__.Baz'>: <class '__main__.Foo'>

Recherche de sous-sous-classes :
Si vous en avez besoin pour trouver des sous-sous-classes, vous pouvez utiliser une fonction récursive :

def all_subclasses(cls):
    return set(cls.__subclasses__()).union(
        [s for c in cls.__subclasses__() for s in all_subclasses(c)])

Remarque :
Il est crucial de noter que pour que __subclasses__ fonctionne efficacement, les définitions de classe des sous-classes doit avoir été exécuté auparavant. Si vous disposez d'une chaîne représentant le nom de la classe, vous pouvez d'abord récupérer la classe en utilisant des techniques telles que globals(), locals() ou importlib.

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!

Déclaration:
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