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!