Unterklassen einer Klasse in Python finden
In Python können Sie die Unterklassen einer bestimmten Klasse über ihre __subclasses__( )Methode. Diese Methode ist für Klassen neuen Stils verfügbar, die von der Klasse „object“ geerbt werden und häufig in Python 3 verwendet werden.
So erhalten Sie die Namen der Unterklassen:
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']
Alternativ können Sie die Unterklassen selbst abrufen:
Foo.__subclasses__() # [<class '__main__.Bar'>, <class '__main__.Baz'>]
So bestätigen Sie die Basisklassenzuordnung:
for cls in Foo.__subclasses__(): print(cls.__base__) # <class '__main__.Foo'> # <class '__main__.Foo'>
Rekursiver Unterklassenabruf:
If Wenn Sie Unterklassen (Enkel usw.) erfassen müssen, ist ein rekursiver Ansatz erforderlich:
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'>}
Hinweis: Wenn die Klassendefinition einer Unterklasse nicht ausgeführt wurde (z. B. ihr Modul). nicht importiert), wird es von __subclasses__() nicht erkannt.
Abrufen von Unterklassen aus einem Klassennamen:
Angenommen, Sie haben die Stattdessen wird der Klassenname als String verwendet. Führen Sie in diesem Fall die folgenden Schritte aus:
Suchen Sie das Klassenobjekt anhand des Klassennamens:
Wenn im selben Modul:
cls = globals()[name]
Wenn in einem Modul:
import importlib modname, _, clsname = name.rpartition('.') mod = importlib.import_module(modname) cls = getattr(mod, clsname)
Das obige ist der detaillierte Inhalt vonWie kann ich die Unterklassen einer bestimmten Klasse in Python finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!