2016-08-03 18 views
0

Ich habe 2 Python-Dateien im selben Verzeichnis. one.py und two.py, die die Klassen First und Second enthalten. Ich möchte importieren Klassen und erben sich gegenseitig und verwenden Methoden voneinander definiert.Python-Klassen erben von einander

one.py

from two import Second 
class First(Second): 
    def first(self): 
     print "first" 

two.py

from one import First 
class Second(First): 
    def second(self): 
     print "second" 

beim Kompilieren ich folgende Störung erhalten. Kann ich das irgendwie überwinden? Bitte schlagen Sie auch alternative Methoden vor.

Traceback (most recent call last): 
    File "C:\Users\uvijayac\Desktop\New folder\two.py", line 1, in <module> 
    from one import First 
    File "C:\Users\uvijayac\Desktop\New folder\one.py", line 1, in <module> 
    from two import Second 
    File "C:\Users\uvijayac\Desktop\New folder\two.py", line 1, in <module> 
    from one import First 
ImportError: cannot import name First 
+0

Vererbung ist eine Top-Down-Hierarchie, keine Matrix. Sie sollten Ihr Design überdenken. – cdarke

+0

Was tun, wenn meine Kindklasse eine Methode der Elternklasse verwenden muss. –

+0

Das ist in Ordnung, es ist die andere Richtung (Eltern mit Childs Methode), die die Regeln bricht. – cdarke

Antwort

1

Das eigentliche Problem, das Sie antreffen, ist, dass Sie versuchen, einen zirkulären Import durchzuführen, der nichts mit Ihrer zirkulären Vererbung zu tun hat. (Es gibt viel Material zu SO darüber, wie man das vermeidet.)

Beachten Sie jedoch, dass zirkuläre Vererbung auch nicht möglich ist, da eine Klasse nur für Unterklassen verfügbar ist, wenn sie definiert ist und ihre Definition beinhaltet, von der anderen Unterklasse zu sein Klasse, die also auch schon definiert werden muss, was erfordert ... Sie bekommen den Punkt - Sie können keine zirkuläre Vererbung haben.