是否可以覆盖整个Python包的内置Python?

问题描述 投票:0回答:1

我有一个包含几十个子包/模块的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函数?或者在每个模块中添加一行代码是我唯一的选择吗?

python package built-in monkeypatching shadowing
1个回答
1
投票

想想你要对这个模块做什么:你已经编写了自己的包,个人改变了内置函数的链接方式。您想要重新定义标准语言功能。没关系......语言的一部分功能就是能够按照你定义的方式做事。

如果您希望在默认情况下执行此操作,则会出现问题,从而覆盖未明确请求更改的代码的标准功能。没有一些强大的权威,你就无法做到这一点。最直接的方法是从源代码重建Python系统,用您自己的标准open替换。

实际上,“正常”的方式是让每个应用程序模块“选择加入”,明确声明它想要使用新的open而不是语言定义的那个。这是您在第二段中概述的方法。这对你来说有什么问题?在每个参数化文件中插入一行是单个系统命令。

© www.soinside.com 2019 - 2024. All rights reserved.