Recherche des sous-classes d'une classe en Python
En Python, vous pouvez déterminer les sous-classes d'une classe donnée grâce à ses __subclasses__( ) méthode. Cette méthode est disponible pour les classes de nouveau style, héritées de la classe "object" et couramment utilisées dans Python 3.
Pour obtenir les noms des sous-classes :
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass [cls.__name__ for cls in Foo.__subclasses__()] # ['Bar', 'Baz']
Alternativement, pour récupérer les sous-classes elles-mêmes :
Foo.__subclasses__() # [<class '__main__.Bar'>, <class '__main__.Baz'>]
Pour confirmer l'association de classe de base :
for cls in Foo.__subclasses__(): print(cls.__base__) # <class '__main__.Foo'> # <class '__main__.Foo'>
Récupération récursive de sous-classe :
Si vous devez capturer des sous-sous-classes (petits-enfants, etc.), une approche récursive est nécessaire :
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)]) all_subclasses(Foo) # {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Remarque : Si la définition de classe d'une sous-classe n'a pas été exécutée (par exemple, son module est non importé), il ne sera pas détectable par __subclasses__().
Obtention de sous-classes à partir d'un nom de classe :
Supposons que vous ayez le nom de classe sous forme de chaîne à la place. Dans ce cas, suivez ces étapes :
Recherchez l'objet de classe en utilisant le nom de la classe :
Si dans le même module :
cls = globals()[name]
Si dans n'importe quel module :
import importlib modname, _, clsname = name.rpartition('.') mod = importlib.import_module(modname) cls = getattr(mod, clsname)
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!