Wie bekommen die Eltern eine Python-Klasse?
Wie bekomme ich die übergeordnete Klasse(N) Python-Klasse?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie bekomme ich die übergeordnete Klasse(N) Python-Klasse?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwenden Sie das folgende Attribut:
Aus der docs:
Beispiel:
Anderes Beispiel:
Wenn Sie möchten, dass alle Vorfahren nicht nur die unmittelbaren, gebrauchen inspizieren.getmro:
Sinnvoll, dies gibt Ihnen alle Vorgänger-Klassen in das "method resolution order", D. H. die Reihenfolge, in der die Vorfahren überprüft werden, die beim auflösen eine Methode (oder, tatsächlich, jede andere Attribut -- Methoden und andere Attribute im gleichen Namensraum von Python, nach alle;-).
cls.__mro__
(zumindest in Python 3.5)New-style-Klassen haben eine mro-Methode, die Sie aufrufen können, die gibt eine Liste von parent-Klassen-Methode Auflösung um.
object
scheint nicht zu reagierenmro
.x
können wir die Methode Auflösung, um mit dem Anruftype(x).mro()
können wir prüfen, obx
hatClassX
als Basis-Klasse mit:ClassX in type(x).mro()
Basen verwenden, wenn Sie wollen einfach nur die Eltern, verwenden Sie
__mro__
(wie bereits von @naught101), um die Methode Auflösung um (also zu wissen, in welcher Reihenfolge die init ' s ausgeführt wurden).Basen (und ersten erste die Klasse für ein vorhandenes Objekt):
Für die mro in den letzten Python-Versionen:
Offensichtlich, wenn Sie bereits eine Klasse definiert haben, können Sie einfach anrufen
__mro__
auf, die direkt:Den SCHNELLSTE Weg, um zu sehen, alle Eltern, und UM, benutzen Sie einfach die eingebaute
__mro__
d.h.
repr(YOUR_CLASS.__mro__)
Ausgänge, IN UM
Dort haben Sie es. Die "beste" Antwort jetzt, hat 182 Stimmen (wie ich tippe), aber das ist SO viel einfacher als einige komplizierte for-Schleife, sucht in Grundlagen einer Klasse zu einer Zeit, nicht zu erwähnen, wenn eine Klasse erweitert, ZWEI oder mehreren übergeordneten Klassen. Importieren und verwenden von
inspect
nur Wolken den Anwendungsbereich unnötig ein. Es ehrlich ist eine Schande, die Menschen nicht wissen, nur die built-insIch Hoffe, das Hilft!
inspect.getmro
nur Anrufe__mro__
auf das Objekt, wie Sie in github.com/python/cpython/blob/... . Mitgetmro
produziert sauberer und lesbarer code. Obwohl das überspringen einer Funktion aufrufen, ist in der Tat schneller.Wenn Sie möchten, um sicherzustellen, dass Sie alle aufgerufen, verwenden Sie
super
auf allen Ebenen.