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

Wie kann ich alle Unterklassen einer Klasse in Python finden?

Patricia Arquette
Freigeben: 2024-11-15 06:05:02
Original
527 Leute haben es durchsucht

How Can I Find All Subclasses of a Class in Python?

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

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

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:

  1. Suchen Sie die Klasse anhand des Klassennamens.
  2. Verwenden Sie __subclasses__(), um die abzurufen Unterklassen der gefundenen Klasse.

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]
    Nach dem Login kopieren
  • Wenn innerhalb des lokalen Namensraums erwartet:

    cls = locals()[name]
    Nach dem Login kopieren
  • Wenn irgendwo in den Modulen:

    import importlib
    modname, _, clsname = name.rpartition('.')
    mod = importlib.import_module(modname)
    cls = getattr(mod, clsname)
    Nach dem Login kopieren

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!

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