Heim > Artikel > Backend-Entwicklung > Wie kann ich alle Unterklassen einer Python-Klasse finden?
Zugriff auf Unterklassen einer Klasse
In Python kann das Auffinden aller Unterklassen einer bestimmten Klasse über die Methode __subclasses__ erreicht werden. Diese Methode ist für Klassen neuen Stils verfügbar (solche, die von einem Objekt in Python 3 erben oder von einer Klasse neuen Stils unterklassifiziert werden).
Betrachten Sie beispielsweise den folgenden Code:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass
Um die Unterklassen von Foo abzurufen, können wir den folgenden Code verwenden:
print([cls.__name__ for cls in Foo.__subclasses__()])
Dadurch werden die Namen der ausgedruckt Unterklassen:
['Bar', 'Baz']
Wir können die Unterklassen auch selbst mit __subclasses__() erhalten:
print(Foo.__subclasses__())
Dadurch wird die folgende Liste von Unterklassen gedruckt:
[<class '__main__.Bar'>, <class '__main__.Baz'>]
Um zu bestätigen, dass diese Unterklassen tatsächlich Foo als Basisklasse haben, können wir Folgendes verwenden Code:
for cls in Foo.__subclasses__(): print(cls.__base__)
Dadurch wird Folgendes gedruckt:
<class '__main__.Foo'> <class '__main__.Foo'>
Es ist jedoch zu beachten, dass die Klassendefinition einer Unterklasse nicht ausgeführt wird, wenn sie noch nicht ausgeführt wurde gefunden von __subclasses__. Um dies zu berücksichtigen, kann eine Rekursion eingesetzt 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))
Dies ergibt Folgendes:
{<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Das obige ist der detaillierte Inhalt vonWie kann ich alle Unterklassen einer Python-Klasse finden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!