如何在builtins模块上获取overriden内置方法的原始版本?

时间:2016-12-31 15:25:11

标签: python python-3.x

在代码中的某个任意位置,存在:

builtins.open = my_open

我无法更改该代码,但它已被破坏。我需要确保所有open次来电,包括来自其他内置库的 使用原始的打开。我需要的是:

orig_open = get_original_method("open")
builtins.open = orig_open

在Javascript中,我通常通过创建新的窗口框架并从那里获取方法来解决该问题。怎么在python中做到?

2 个答案:

答案 0 :(得分:2)

如果此处的问题只是open功能,您可以随时抓取io.open,这是它的别名:

import io
builtins.open = io.open

我不知道任何通用的解决方案,即使我不会感到惊讶,如果存在的话。

答案 1 :(得分:0)

我不确定你想要什么,但是你可以使用__builtins__魔法变量来获取"原作"开放功能:

>>> builtins.open = __builtins__.open

"魔术变量"只是builtins模块的别名:

>>> __builtins__
<module 'builtins' (built-in)>
>>> 

但是,您应该注意这是一个实现细节,其他版本的Python解释器可能不支持它。来自builtins模块的Python 3文档。

  

作为实现细节,大多数模块都将名称__builtins__作为其全局变量的一部分提供。 [...]由于这是一个实现细节,它可能不会被Python的替代实现使用。