Python 如何在内置模块上获取重写的内置方法的原始版本?
在代码中的任意位置,存在以下情况:Python 如何在内置模块上获取重写的内置方法的原始版本?,python,python-3.x,Python,Python 3.x,在代码中的任意位置,存在以下情况: builtins.open = my_open 我不能改变那个密码,但它坏了。我需要确保任何open调用,包括来自其他内置库的调用,都使用原始的open。我需要的是: orig_open = get_original_method("open") builtins.open = orig_open 在Javascript中,我通常通过创建新的窗口框架并从中获取方法来解决这个问题。如何在python中实现它?如果这里的问题仅仅是打开函数,您可以随时获取它的别
builtins.open = my_open
我不能改变那个密码,但它坏了。我需要确保任何open
调用,包括来自其他内置库的调用,都使用原始的open。我需要的是:
orig_open = get_original_method("open")
builtins.open = orig_open
在Javascript中,我通常通过创建新的窗口框架并从中获取方法来解决这个问题。如何在python中实现它?如果这里的问题仅仅是
打开
函数,您可以随时获取它的别名:
import io
builtins.open = io.open
我不知道有任何通用的解决方案,即使有这样的解决方案,我也不会感到惊讶。我不太确定您想要什么,但您可以使用
\uuuuuuu内置函数
魔术变量获取“原始”打开函数:
>>> builtins.open = __builtins__.open
“magic variable”只是内置模块的别名:
>>> __builtins__
<module 'builtins' (built-in)>
>>>
>>\uuu内置__
>>>
但是,您应该注意,这是一个实现细节,其他版本的Python解释器可能不支持它。来自模块上的Python 3文档
作为一个实现细节,大多数模块的名称\uuuuuu内置\uuuuuu
都作为其全局模块的一部分提供。[…]由于这是一个实现细节,Python的替代实现可能不会使用它
谢谢。不过,我会等待,看看是否有人能提供一个通用的解决方案。这在控制台中可以正常工作。但如果我把它放在python文件中,它会给我以下错误:AttributeError:“dict”对象没有属性“open”
我是python新手,不知道该怎么想。@TomášZato一切都对我有用。我使用的是Python 3.5.2。我无法在独立文件中重现该问题。但是,一旦我执行了包含有问题代码的项目,就会出现这个错误。我不知道如何在SO评论的范围内提供更多有用的信息。@TomášZato好吧,你可能只想使用Jim的解决方案。@JimFasarakis Hilliard你真的认为你的编辑改进了问题吗?是否有人可能在内置标签上搜索?