Wie kann ich alle Unterklassen einer Python-Klasse finden?

Patricia Arquette
Freigeben: 2024-11-17 09:50:03
Original
152 Leute haben es durchsucht

How Can I Find All Subclasses of a Python Class?

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
Nach dem Login kopieren

Um die Unterklassen von Foo abzurufen, können wir den folgenden Code verwenden:

print([cls.__name__ for cls in Foo.__subclasses__()])
Nach dem Login kopieren

Dadurch werden die Namen der ausgedruckt Unterklassen:

['Bar', 'Baz']
Nach dem Login kopieren

Wir können die Unterklassen auch selbst mit __subclasses__() erhalten:

print(Foo.__subclasses__())
Nach dem Login kopieren

Dadurch wird die folgende Liste von Unterklassen gedruckt:

[<class '__main__.Bar'>, <class '__main__.Baz'>]
Nach dem Login kopieren

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__)
Nach dem Login kopieren

Dadurch wird Folgendes gedruckt:

<class '__main__.Foo'>
<class '__main__.Foo'>
Nach dem Login kopieren

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))
Nach dem Login kopieren

Dies ergibt Folgendes:

{<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage