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

Linda Hamilton
Libérer: 2024-11-18 09:10:02
original
629 Les gens l'ont consulté

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

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

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

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!

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