我刚刚开始尝试一种新技术,我将其命名为(至少目前)“模块鸭式打字”。
例子:
主模块
import somepackage.req ## module required by all others
import abc
import Xyz
模块abc
__all__=[]
def getBus():
""" Locates the `req` for this application """
for mod_name in sys.modules:
if mod_name.find("req") > 0:
return sys.modules[mod_name].__dict__["Bus"]
raise RuntimeError("cannot find `req` module")
Bus=getBus()
在模块abc
中我不需要明确import req
:它可以在包层次结构中的任何地方。当然,这需要一些纪律...
使用这种技术,很容易在层次结构中重新定位包。
有陷阱在等着我吗?例如迁移到 Python 3K
更新:经过更多测试,我决定返回直接在sys.path
.