我刚开始尝试一种新的技术,我把它命名为“模块鸭子打字”。
示例:
主模块
import somepackage.req ## module required by all others
import abc
import Xyz
模块abc
在模块abc
中,我不需要显式地import req
:它可以是包层次结构中的任何地方。当然这需要一些纪律。。。
使用这种技术,可以很容易地在层次结构中重新定位包。
有陷阱在等着我吗?e、 g.迁移到Python 3K
更新了:在更多的测试之后,我决定回到直接在sys.path
中插入包依赖项。
我觉得这更像鸭子打字。我还建议使用比“总线”更唯一的标识符
可能导入了包含“req”的所有类型的模块,但您不知道它是否是您实际要查找的模块:
包的重点是模块层次结构有名称空间。如果用户碰巧导入了某个碰巧包含名称冲突的模块的库,那么“从任何包”中查找模块名称只会导致代码随机中断。在
这种技术很危险而且容易出错。直到有人导入一个新的
something.req
并得到一个令人困惑的、遥远的错误之前,它都可以与您的测试一起工作。(这是最好的情况;当前的实现将跳转到许多其他模块上。)如果重新构造包,那么在不使用任何魔术的情况下,以自动化的方式修改代码就很容易了。Python使我们可以做各种神奇的、动态的事情,但这并不意味着我们应该这样做。在相关问题 更多 >
编程相关推荐