这适用于python 3,但在python 2(版本2.7)中发出ImportError:
Shell命令:
$> python main.py
main.py
import mymodule
mymodule.KlassX().talk_klass_y()
mymodule.KlassY().talk_klass_x()
MyModule的/ __ init__.py
from .x import KlassX
from .y import KlassY
MyModule的/ x.py
from . import y # circular import
def KlassX:
def talk(self):
print('Im in KlassX')
def talk_klass_y(self):
y.KlassY().talk()
MyModule的/ y.py
from . import x # circular import
def KlassY:
def talk(self):
print('Im in KlassY')
def talk_klass_x(self):
x.KlassX().talk()
您可能已经注意到,我已将循环导入写为相对导入,因为建议对包内的导入(PEP-0328)执行此操作 .
我也试过绝对进口:
from mymodule import y # in mymodule/x.py
from mymodule import x # in mymodule/y.py
但这只适用于python 3而不适用于python 2(因为相同的ImportError) .
我可以在python 2中使用它的唯一方法是使用相对导入,使用以下未经推荐的表示法:
import y # in mymodule/x.py
import x # in mymodule/y.py
我真的不喜欢它,因为“import somemodule”作为相对导入仅适用于python 2,因为在python 3中它总是被强制为绝对导入 . 我不明白为什么这个符号:
from mymodule import x
# or
from . import x
在python 2和3中都被接受,表现不同 .
任何线索?我应该如何在python 2中正确执行循环导入?
1 回答
看看摘要:https://gist.github.com/datagrok/40bf84d5870c41a77dc6