Wie können Sie bei einer gegebenen Klasse Foo
(unabhängig davon, ob es sich um eine Klasse neuen Stils handelt oder nicht) alle Basisklassen - irgendwo in der Vererbungshierarchie - daraus generieren issubclass
?
python
class
inheritance
oop
introspection
Sridhar Ratnakumar
quelle
quelle
inspect.getmro(obj)
anstattinspect.getmro(type(obj))
.Sehen Sie sich die
__bases__
Eigenschaft anclass
, die für eine Python verfügbar ist , die ein Tupel der Basisklassen enthält:quelle
getmro
explizit "Keine Klasse erscheint mehr als einmal in diesem Tupel"?__bases__
geht nur eine Ebene höher . (Wie Ihr rekursives Dienstprogramm andeutet, aber ein flüchtiger Blick auf das Beispiel könnte dies nicht aufgreifen.)inspect.getclasstree()
erstellt eine verschachtelte Liste der Klassen und ihrer Basen. Verwendung:quelle
python -c 'import inspect; from pprint import pprint as pp; pp(inspect.getclasstree(inspect.getmro(IOError)))'
Sie können das
__bases__
Tupel des Klassenobjekts verwenden:Das von zurückgegebene Tupel
__bases__
hat alle seine Basisklassen.Ich hoffe es hilft!
quelle
__bases__
Beachten Sie, dass in Python 3.x jede Klasse von der Basisobjektklasse erbt.
quelle
Laut Python-Dokument können wir auch einfach
class.__mro__
Attribute oderclass.mro()
Methoden verwenden:quelle
Obwohl Jochens Antwort sehr hilfreich und richtig ist, da Sie die Klassenhierarchie mit der .getmro () -Methode des Inspect-Moduls erhalten können, ist es auch wichtig hervorzuheben, dass die Vererbungshierarchie von Python wie folgt lautet:
Ex:
Eine erbende Klasse
Ex:
Eine geerbte Klasse
Eine Klasse kann von einer anderen erben - Die zugewiesenen Klassen werden geerbt - insbesondere werden ihre Methoden vererbt - dies bedeutet, dass Instanzen einer ererbenden (untergeordneten) Klasse auf die der geerbten (übergeordneten) Klasse zugeschriebenen zugreifen können
Instanz -> Klasse -> dann geerbte Klassen
mit
zeigt Ihnen die Hierarchie in Python.
quelle