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
Patricia ArquetteOriginal
2024-11-15 06:05:02554Durchsuche

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'>]

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:

  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]
  • 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!

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