有導入此包時一個明顯的週期性導入錯誤:爲什麼週期性的進口問題消失了?
文件__init__.py
:
from . import modules
文件forward.py
:
from .modules import ext_modules
def forward(dest):
if dest in ext_modules:
print("forwarding to {}".format(ext_modules[dest]))
文件modules.py
:
from . import forward
ext_modules = {}
def main():
ext_modules['test'] = 'TEST'
forward.forward('test')
這進口問題可以解決,例如通過交換modules.py文件中的第1行和第3行。到目前爲止,我想我明白髮生了什麼事情。
我真的不明白的是這個。當我將另一個導入添加到__init__.py
文件的頂部時:
from . import forward
from . import modules
問題消失了。該軟件包可以導入,主要功能可以工作。然而,modules
和forward
之間的週期依賴性仍然存在。這些文件保持不變。你能解釋一下那裏發生了什麼嗎? (Python版本3.5)
感謝您的詳細解釋。我巧妙地發現了它。我不知道如何調用它。也許是「空模塊技巧」?無論如何,你會推薦使用它作爲週期性依賴問題的一個可能的解決方案,還是它是一個醜陋的黑客? – VPfB
@ VPfB:這是解決您的問題的合適解決方案。你可以通過使用from來改進它。在'forward.py'中導入模塊,然後在'forward(dest)'模塊中使用'modules.ext_modules';即到處使用晚期綁定。 –