Heim >Backend-Entwicklung >Python-Tutorial >Wie finde ich Unterklassen einer Python-Klasse mit „__subclasses__'?

Wie finde ich Unterklassen einer Python-Klasse mit „__subclasses__'?

Susan Sarandon
Susan SarandonOriginal
2024-11-22 16:08:13377Durchsuche

How to Find Subclasses of a Python Class Using `__subclasses__`?

Unterklassen einer Klasse mithilfe der Unterklassen-Methode von Python finden

Das Finden aller Unterklassen einer bestimmten Klasse ist üblich Bedarf in der objektorientierten Programmierung in Python. Python bietet eine elegante Lösung durch die Methode __subclasses__.

Klassen neuen Stils in Python (d. h. solche, die von der Objektklasse erben) verfügen über eine Methode __subclasses__, die eine Liste ihrer Unterklassen zurückgibt. Betrachten Sie die folgende Klassenhierarchie:

class Foo(object):
    pass

class Bar(Foo):
    pass

class Baz(Foo):
    pass

class Bing(Bar):
    pass

Um die Unterklassen von Foo zu erhalten, rufen Sie einfach Foo.__subclasses__() auf:

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

Recursive Subclass Retrieval

Wenn Sie alle Unterklassen, einschließlich Unterunterklassen, finden möchten, ist die Rekursion hilfreich notwendig:

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))
# Output: {<class '__main__.Bar'>, <class '__main__.Baz'>, <class '__main__.Bing'>}

Umgang mit Klassennamen-Strings

Sie haben erwähnt, dass Unterklassen gefunden werden sollen, denen der Klassenname als String gegeben wird. Da es sich bei Python-Klassen um erstklassige Objekte handelt, wird empfohlen, die Klasse direkt und nicht als Zeichenfolgendarstellung zu verwenden. Wenn Sie jedoch über eine Klassennamenzeichenfolge verfügen, können Sie die Klasse mithilfe des globals()-Wörterbuchs abrufen:

name = 'Foo'
cls = globals()[name]
print(cls.__subclasses__())

Für Klassen, die in verschiedenen Modulen definiert sind, können Sie importlib verwenden, um die Klasse durch Importieren abzurufen Modul und Zugriff auf das entsprechende Attribut:

name = 'pkg.module.Foo'
import importlib
modname, _, clsname = name.rpartition('.')
mod = importlib.import_module(modname)
cls = getattr(mod, clsname)
print(cls.__subclasses__())

Das obige ist der detaillierte Inhalt vonWie finde ich Unterklassen einer Python-Klasse mit „__subclasses__'?. 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