Heim  >  Artikel  >  Backend-Entwicklung  >  Wie kann ich alle Unterklassen einer Python-Klasse finden?

Wie kann ich alle Unterklassen einer Python-Klasse finden?

Patricia Arquette
Patricia ArquetteOriginal
2024-11-17 09:50:03153Durchsuche

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

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!

Stellungnahme:
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