Python 带继承的循环导入
Python circular imports with inheritance
我有一个父子class,其中父的方法returns是子的一个实例。两个 classes 都在单独的文件 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
然后一切正常,我可以同时使用两个 classes。有没有办法只导入 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__(...)
显而易见的解决方案是将两个 类 放入同一个文件(相同的 module
)。
它们紧密相关,因此非常合理,不需要 "hacks"(将导入放在文件末尾)和解决方法(导入的特殊顺序)。
同时检查这些来源:How many Python classes should I put in one file?, Is it considered Pythonic to have multiple classes defined in the same file?。
您可以在 ClassA 中导入 ClassB 本地 在您使用它的地方(在 someMethod 中)
class ClassA():
def __init__(self, ...):
....
def someMethod(self, ...):
from classB import ClassB
...
return ClassB(...)
这样我就可以避免循环导入错误
我有一个父子class,其中父的方法returns是子的一个实例。两个 classes 都在单独的文件 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
然后一切正常,我可以同时使用两个 classes。有没有办法只导入 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__(...)
显而易见的解决方案是将两个 类 放入同一个文件(相同的 module
)。
它们紧密相关,因此非常合理,不需要 "hacks"(将导入放在文件末尾)和解决方法(导入的特殊顺序)。
同时检查这些来源:How many Python classes should I put in one file?, Is it considered Pythonic to have multiple classes defined in the same file?。
您可以在 ClassA 中导入 ClassB 本地 在您使用它的地方(在 someMethod 中)
class ClassA():
def __init__(self, ...):
....
def someMethod(self, ...):
from classB import ClassB
...
return ClassB(...)
这样我就可以避免循环导入错误