1
這工作在Python 3但在python 2發射一個ImportError(2.7版):Python的圓形相對導入在Python 3的工作,但不Python 2中
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
/y.py
from . import x # circular import
def KlassY:
def talk(self):
print('Im in KlassY')
def talk_klass_x(self):
x.KlassX().talk()
正如你可能已經注意到,我已經寫了圓形進口的相對進口的,因爲它是推薦的東西進口做
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的包內(PEP-0328)。
我也試着做絕對導入:
from mymodule import y # in mymodule/x.py
from mymodule import x # in mymodule/y.py
但這只是仍然可以工作,蟒蛇3而不是(因爲同樣的導入錯誤的)蟒蛇2。
import y # in mymodule/x.py
import x # in mymodule/y.py
我真的不喜歡它,因爲「進口somemodule」作爲一個相對進口僅在Python的工作原理:
,我可以把它在Python 2的工作是使用相對進口具有以下不推薦的符號的唯一途徑2因爲在python 3中,它總是被迫成爲絕對導入。 我不明白爲什麼這個符號:
from mymodule import x
# or
from . import x
其接受兩個Python 2和3,表現不同。
任何線索? 我應該如何正確地在Python 2中進行循環導入?
我明白了!問題是python 2不能按預期工作,所以我將不得不堅持'import x' ... – wizbcn