我有一个父类和子类,其中父类的方法返回子类的一个实例。这两个类位于单独的文件 classA.py
和 classB.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/