Python循环导入继承

时间:2016-02-03 14:16:10

标签: python oop inheritance python-import

我有一个父类和子类,父类的方法返回子实例。这两个类都位于单独的文件classA.pyclassB.py中。我在导入classA时为了避免循环导入,我将classB导入添加到classA.py的末尾(如下所示)。一切运作良好,我能够在我的代码中正确使用classA

如果我只想使用classB,我现在遇到了问题。例如,如果我运行

from classB import ClassB

我收到以下错误:

File "classA.py", line 269, in <module>
    from classB import ClassB
ImportError: cannot import name ClassB

如果我跑:

from classA import ClassA
from classB import ClassB

然后一切都很完美,我可以使用这两个类。有没有办法只导入classB或者我必须首先导入classA然后classB

classA.py

class ClassA():
    def __init__(self, ...):
        ....

    def someMethod(self, ...):
        ...
        return ClassB(...)

from classB import ClassB

classB.py

from classA import ClassA

class ClassB(ClassA):
    def __init__(self, ...):
    super(ClassB, self).__init__(...)

1 个答案:

答案 0 :(得分:1)

显而易见的解决方案是将两个类放在同一个文件中(相同的module)。 它们紧密相关,因此它非常有意义,并且不需要“黑客”(将导入放在文件末尾)和变通方法(特殊的导入顺序)。

还请检查以下来源:How many Python classes should I put in one file?Is it considered Pythonic to have multiple classes defined in the same file?