我有一个Python软件包,其中包含数十个子软件包/模块。几乎每个模块都使用open
内置Python函数。我已经编写了自己的文件打开功能实现,并希望将包模块中的所有open
调用“重定向”到my_open
函数。
我知道可以在模块顶部写入open = my_open_file
来遮盖模块中的open
,但这将意味着编辑每个模块。或者,将open = my_open_file
放入包的__init__.py
中,然后执行from package_name import open
,这还意味着向每个模块添加一行代码。
是否可以在一个地方为包范围定义my_open_file
函数?还是在每个模块中添加一行代码是我唯一的选择?
答案 0 :(得分:1)
请考虑使用此模块需要做什么:您已经编写了自己的软件包,这是对内置函数链接方式的个人更改。您想重新定义标准语言功能。没关系...语言的强大功能之一就是能够按照您定义的方式进行操作。
当您要默认执行 时,问题就来了,这取代了没有显式请求更改的标准功能。没有一些强大的权威,您将无法做到这一点。最直接的方法是从源代码重建Python系统,用您自己的标准open
代替。
实际上,“常规”方式是让每个应用程序模块“选择加入”,并明确声明它要使用新的open
而不是该语言定义的模块。这是您在第二段中概述的方法。这对您有什么问题?在参数化文件列表的每个列表中插入一行是单个系统命令。