У меня проблема с кодом Python 3.6 в отношении циклического импорта.
У меня есть базовый класс, называемый Cereal, и 4 класса, которые наследуют его (Cereal1, Cereal2, ...). Каждый - это отдельный файл. Например:
File1:
class Cereal:
File2:
class Cereal1(Cereal):
И так далее. Когда я создаю кашу:
x = Cereal(K1,K2)
в зависимости от значений K1 и K2, функция внутри конструктора распознает, какой это тип зерна и меняет класс зерна:
def __init__(self, K1, K2):
self.findcerealtype(K1, K2)
def findcerealtype(self, K1, K2):
if K1 < 0:
self.__class__ = Cereal1
self = Cereal1(K1, K2)
elif K1 == 0:
self.__class__ = Cereal2
self = Cereal2(K1, K2)
else:
if K2 < 1:
self.__class__ = Cereal3
self = Cereal3(K1, K2)
else:
self.__class__ = Cereal4
self = Cereal4(K1, K2)
Ну, проблема возникает, когда я импортирую файлы следующим образом:
File1:
from File2 import Cereal1
from File3 import Cereal2
from File4 import Cereal3
from File5 import Cereal4
class Cereal:
def __init__(self,K1,K2):
findcerealtype(self,K1,K2)
def findcerealtype(self, K1, K2):
.
.
.and other functions
File2:
from File1 import Cereal
class Cereal1(Cereal):
def __init__(self, K1, K2):
.
.
.and other functions
Когда я запускаю код, я получаю следующую ошибку:
ImportError: cannot import name 'Cereal'
Из того, что я прочитал, я думаю, что проблема заключается в круговом импорте. Я пробовал разные варианты импорта (то есть import File1) и позднее импортировать файлы в коде, но ни один из них, похоже, не работает.
Я также читал, что циклический импорт не должен происходить, и проблема в том, как мой код структурирован. В этом случае я открыт для предложений о том, как переписать код, но я не знаю, как это сделать самостоятельно.
Если вам удалось прочитать до конца, большое спасибо, и я надеюсь, что вы мне поможете!