Liste aller Basisklassen in einer Hierarchie der gegebenen Klasse?
-
05-07-2019 - |
Frage
eine Klasse Foo
Given (ob es sich um eine -Stil Klasse oder nicht), wie wollen Sie generieren alle die Basisklassen - überall in der Vererbungshierarchie - es issubclass
?
Lösung
inspect.getmro(cls)
arbeitet für die neuen und alten Stil-Klassen und gibt die gleiche wie NewClass.mro()
. eine Liste der Klasse und alle seine Vorfahren Klassen in der Reihenfolge für die Methodenauflösung verwendet
>>> class A(object):
>>> pass
>>>
>>> class B(A):
>>> pass
>>>
>>> import inspect
>>> inspect.getmro(B)
(<class '__main__.B'>, <class '__main__.A'>, <type 'object'>)
Andere Tipps
Sehen Sie die __bases__
Eigenschaft auf einem Python class
, die enthält ein Tupel der Basen Klassen:
>>> def classlookup(cls):
... c = list(cls.__bases__)
... for base in c:
... c.extend(classlookup(base))
... return c
...
>>> class A: pass
...
>>> class B(A): pass
...
>>> class C(object, B): pass
...
>>> classlookup(C)
[<type 'object'>, <class __main__.B at 0x00AB7300>, <class __main__.A at 0x00A6D630>]
inspect.getclasstree()
wird eine verschachtelte Liste von Klassen und die Basen erstellen.
Verbrauch:
inspect.getclasstree(inspect.getmro(IOError)) # Insert your Class instead of IOError.
können Sie die __bases__
Tupel des Klassenobjekts verwenden:
class A(object, B, C):
def __init__(self):
pass
print A.__bases__
Das Tupel von __bases__
zurückgegeben hat alle seine Basisklassen.
Hoffe, es hilft!
Obwohl Jochen Antwort ist sehr hilfreich und richtig, wie Sie die Klassenhierarchie erhalten die .getmro () -Methode des Moduls prüfen verwenden, ist es auch wichtig zu betonen, dass Pythons Vererbungshierarchie ist wie folgt:
ex:
class MyClass(YourClass):
Eine Klasse inheriting
- Child-Klasse
- Abgeleitete Klasse
- Subclass
ex:
class YourClass(Object):
Eine vererbte Klasse
- Übergeordnete Klasse
- Basisklasse
- Superklasse
Eine Klasse kann von einer anderen erben - Die Klasse zugeschrieben werden vererbt - insbesondere sind ihre Methoden geerbt - dies bedeutet, dass Instanzen eines Vererbungs (Kind) Klasse können die geerbten (übergeordnete) Klasse zugeordnet Zugriff
Beispiel -> Klasse -> dann geerbten Klassen
mit
import inspect
inspect.getmro(MyClass)
zeigt Ihnen die Hierarchie innerhalb Python.
In Python 3.7 Sie müssen nicht importieren inspizieren, type.mro geben Sie das Ergebnis aus.
>>> class A:
... pass
...
>>> class B(A):
... pass
...
>>> type.mro(B)
[<class '__main__.B'>, <class '__main__.A'>, <class 'object'>]
>>>
Sie darauf, dass in Python 3.x erbt jede Klasse von der Basisobjektklasse.