Unterklassen einer Klasse nach Namen in Python finden
Problem:
Wie können Sie alle Klassen abrufen? die von einer bestimmten Basisklasse in Python erben und deren Klasse verwenden Name?
Lösung:
Python bietet einen eleganten Ansatz, um Unterklassen einer bestimmten Klasse anhand ihres Namens zu finden. Mit der Methode __subclasses__ können Sie die Unterklassen einer Klasse direkt abrufen.
Code-Erklärung:
Angenommen, Sie haben eine Basisklasse namens Foo mit den Unterklassen Bar, Baz, und Bing veranschaulicht der folgende Codeausschnitt die Verwendung von __subclasses__:
class Foo(object): pass class Bar(Foo): pass class Baz(Foo): pass class Bing(Bar): pass # Get the subclasses of Foo foo_subclasses = Foo.__subclasses__() print("Subclass names:", [cls.__name__ for cls in foo_subclasses]) print("Subclasses themselves:", Foo.__subclasses__()) # Validate that the subclasses inherit from Foo for cls in Foo.__subclasses__(): print("Base class of {}: {}".format(cls, cls.__base__))
Ausgabe:
Subclass names: ['Bar', 'Baz'] Subclasses themselves: [<class '__main__.Bar'>, <class '__main__.Baz'>] Base class of <class '__main__.Bar'>: <class '__main__.Foo'> Base class of <class '__main__.Baz'>: <class '__main__.Foo'>
Unterunterklassen finden:
Wenn Sie Unterunterklassen finden müssen, können Sie eine Rekursive verwenden Funktion:
def all_subclasses(cls): return set(cls.__subclasses__()).union( [s for c in cls.__subclasses__() for s in all_subclasses(c)])
Hinweis:
Es ist wichtig zu beachten, dass die Klassendefinitionen der Unterklassen zuvor ausgeführt worden sein müssen, damit __subclasses__ effektiv funktioniert. Wenn Sie über eine Zeichenfolge verfügen, die den Klassennamen darstellt, können Sie die Klasse zunächst mithilfe von Techniken wie globals(), locals() oder importlib.
Das obige ist der detaillierte Inhalt vonWie rufe ich Unterklassen einer Klasse nach Namen in Python ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!