Wie kann ich die Unterklassen einer bestimmten Klasse in Python finden?

DDD
Freigeben: 2024-11-16 01:39:03
Original
887 Leute haben es durchsucht

How can I find the subclasses of a given class in Python?

Unterklassen einer Klasse in Python finden

In Python können Sie die Unterklassen einer bestimmten Klasse über ihre __subclasses__( )Methode. Diese Methode ist für Klassen neuen Stils verfügbar, die von der Klasse „object“ geerbt werden und häufig in Python 3 verwendet werden.

So erhalten Sie die Namen der Unterklassen:

class Foo(object): pass
class Bar(Foo): pass
class Baz(Foo): pass
class Bing(Bar): pass

[cls.__name__ for cls in Foo.__subclasses__()]
# ['Bar', 'Baz']
Nach dem Login kopieren

Alternativ können Sie die Unterklassen selbst abrufen:

Foo.__subclasses__()
# [<class '__main__.Bar'>, <class '__main__.Baz'>]
Nach dem Login kopieren

So bestätigen Sie die Basisklassenzuordnung:

for cls in Foo.__subclasses__():
    print(cls.__base__)
# <class '__main__.Foo'>
# <class '__main__.Foo'>
Nach dem Login kopieren

Rekursiver Unterklassenabruf:

If Wenn Sie Unterklassen (Enkel usw.) erfassen müssen, ist ein rekursiver Ansatz erforderlich:

def all_subclasses(cls):
    return set(cls.__subclasses__()).union(
        [s for c in cls.__subclasses__() for s in all_subclasses(c)])

all_subclasses(Foo)
# {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}
Nach dem Login kopieren

Hinweis: Wenn die Klassendefinition einer Unterklasse nicht ausgeführt wurde (z. B. ihr Modul). nicht importiert), wird es von __subclasses__() nicht erkannt.

Abrufen von Unterklassen aus einem Klassennamen:

Angenommen, Sie haben die Stattdessen wird der Klassenname als String verwendet. Führen Sie in diesem Fall die folgenden Schritte aus:

  1. Suchen Sie das Klassenobjekt anhand des Klassennamens:

    • Wenn im selben Modul:

      cls = globals()[name]
      Nach dem Login kopieren
    • Wenn in einem Modul:

      import importlib
      modname, _, clsname = name.rpartition('.')
      mod = importlib.import_module(modname)
      cls = getattr(mod, clsname)
      Nach dem Login kopieren
  2. Verwenden Sie __subclasses__(), um die Unterklassen von zu erhalten das abgerufene Klassenobjekt.

Das obige ist der detaillierte Inhalt vonWie kann ich die Unterklassen einer bestimmten 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage