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

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

DDD
DDDOriginal
2024-11-16 01:39:03956Durchsuche

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

Alternativ können Sie die Unterklassen selbst abrufen:

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

So bestätigen Sie die Basisklassenzuordnung:

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

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

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]
    • Wenn in einem Modul:

      import importlib
      modname, _, clsname = name.rpartition('.')
      mod = importlib.import_module(modname)
      cls = getattr(mod, clsname)
  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!

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