循环导入Python

时间:2018-05-05 23:05:12

标签: python python-3.x inheritance circular-dependency

我的Python 3.6代码中存在关于循环导入的问题。

我有一个名为Cereal的基类和4个继承它的类(Cereal1,Cereal2,...)。每个都是不同的文件。例如:

File1中:

class Cereal:

文件2:

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

文件2:

from File1 import Cereal

class Cereal1(Cereal):
    def __init__(self, K1, K2):
    .
    .
    .and other functions

当我运行代码时,我收到以下错误:

ImportError: cannot import name 'Cereal'

据我所知,我认为问题是循环进口。我尝试了不同的导入(即导入File1)并稍后在代码中导入文件,但这些似乎都不起作用。

我还读过不应该发生循环导入,问题是我的代码结构化的方式。在这种情况下,我愿意接受有关如何重写代码的建议,但我不知道如何自己完成。

如果你设法读到最后,非常感谢你,我希望你能帮助我!

0 个答案:

没有答案