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 ?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top