我刚开始尝试使用一种我称之为“模块鸭子打字”的新技术(至少现在是这样)。模块“鸭子打字”陷阱?
例子:
主模块
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
插入包的依赖关系。
'mod_name.find(“req”)> 0'并不真正代表您的意思。如果我有一个名为'frequency'的模块怎么办? – 2010-02-23 22:20:06
'sys.modules [mod_name] .__ dict __ [“Bus”]'拼写为'sys.modules [mod_name] .Bus'。 – 2010-02-23 22:20:45
@Mike Graham:是的......正在进行中,因为我已经评论过了。谢谢。 – jldupont 2010-02-23 22:25:15