2016-08-03 9 views
0

У меня есть 2 файла Python в том же каталоге. one.py и two.py, содержащие классы First и Second соответственно. Я хочу, чтобы классы импорта наследовали друг друга и использовали методы, определенные друг другом.классы python, наследующие друг от друга

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" 

при компиляции я получаю следующее сообщение об ошибке. Есть ли способ преодолеть это. Также предлагайте альтернативные методы.

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

Наследование предназначено для иерархии сверху вниз, а не матрицы. Вы должны пересмотреть свой дизайн. – cdarke

+0

Что делать, если класс моего ребенка должен использовать метод из родительского класса. –

+0

Это нормально, это другое направление (родитель, использующий метод ребенка), который нарушает правила. – cdarke

ответ

1

Реальная проблема Вы сталкиваетесь в том, что вы пытаетесь сделать круговой импорт, который не имеет ничего общего с круговым наследованием. (На SO есть много материала о том, как этого избежать.)

Однако обратите внимание, что наследование по кругу также невозможно, так как класс доступен только для подкласса, как только он определен, и его определение включает в себя подклассы от другого класс, который поэтому также должен быть уже определен, что требует ... вы понимаете суть - вы не можете иметь циклическое наследование.

Смежные вопросы