具有继承性的 Python 循环导入

标签 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

A类.py

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

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

from classB import ClassB

B类.py

from classA import ClassA

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

最佳答案

显而易见的解决方案是将两个类放入同一个文件(相同的模块)。 它们紧密相关,因此非常合理,不需要“黑客”(将导入放在文件末尾)和解决方法(导入的特殊顺序)。

同时检查这些来源:How many Python classes should I put in one file? , Is it considered Pythonic to have multiple classes defined in the same file? .

关于具有继承性的 Python 循环导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35179480/

相关文章:

scala - 如何在 Scala 中使类完全不可变

javascript - 多个按钮的一种功能

c#给定基类实例,更新派生类的基类属性

c++ - 如何修复此子类的初始化程序列表错误?

python - 正在创建 InteractiveShellEmbed 的多个不兼容的子类实例

python - 如何更新Python文件中的特定行?

python - 子目录中无法访问Numpy

python - Python 中的多元逻辑回归显示错误

perl - 这不是数组引用吗?为什么它不是数组引用?

使用 #include 和包含保护在单独文件中继承 C++