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
Freigeben: 2024-11-22 16:08:13
Original
362 Leute haben es durchsucht

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

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

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

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

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__())
Nach dem Login kopieren

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__())
Nach dem Login kopieren

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!

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