Alle Unterklassen einer Klasse in Python finden
Um alle von einer angegebenen Basisklasse in Python geerbten Klassen abzurufen, verwenden Sie __subclasses__() Verfahren. Diese Methode ist für Klassen neuen Stils verfügbar, die die Objektklasse erweitern (die Standardeinstellung in Python 3). So funktioniert es:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass print([cls.__name__ for cls in Foo.__subclasses__()]) # ['Bar', 'Baz'] print(Foo.__subclasses__()) # [<class '__main__.Bar'>, <class '__main__.Baz'>]
Um Unterklassen einzuschließen, kann Rekursion verwendet werden:
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)]) print(all_subclasses(Foo)) # {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Hinweis: Unterklassen, die noch nicht definiert wurden (z. B. aufgrund nicht importierter Module) werden von nicht erkannt __subclasses__().
Unterklassen mithilfe einer Klassennamenzeichenfolge suchen:
Wenn nur der Klassenname als Zeichenfolge verfügbar ist, sind die folgenden Schritte erforderlich:
Eine Klasse anhand einer Namenszeichenfolge finden:
Die Methode zum Auffinden einer Klasse anhand einer Namenszeichenfolge hängt von der erwarteten Position ab :
Wenn innerhalb desselben erwartet Modul:
cls = globals()[name]
Wenn innerhalb des lokalen Namensraums erwartet:
cls = locals()[name]
Wenn irgendwo in den Modulen:
import importlib modname, _, clsname = name.rpartition('.') mod = importlib.import_module(modname) cls = getattr(mod, clsname)
Sobald die Klasse gefunden wurde, kann ihre Methode __subclasses__() verwendet werden, um die gewünschte Klasse abzurufen Liste der Unterklassen.
Das obige ist der detaillierte Inhalt vonWie kann ich alle Unterklassen einer Klasse in Python finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!