我被要求在其他人最初编写的代码中添加一些功能。有一个python代码定义了一个覆盖内置函数的open
函数
def open(xxx):
...
我想open
在同一个 python 文件中访问原始函数。
最好的方法是更改自定义名称open
。但我不想更改它,因为它是一个拥抱系统,可能有许多其他文件可以访问此方法。
open
那么,即使它已被覆盖,有没有办法访问构建?
>>> __builtins__.open
<built-in function open>
在 Python2 和 Python3 中工作相同
访问函数的覆盖版本的更一般的方法是:
oldVersionOfOpen = open
def open(...):
oldVersionOfOpen(...)
事实上,函数只是有值的变量(它是可调用的),因此您也可以将它们分配给其他变量来存储它们。
你甚至可以这样做:
def newOpen(...):
pass # do whatever you'd like to, even using originalOpen()
originalOpen, open = open, newOpen # switch
蟒蛇2:
>>> import __builtin__
>>> __builtin__.open
<built-in function open>
蟒蛇 3:
>>> import builtins
>>> builtins.open
<built-in function open>
不要使用__builtins__
:
从文档:
CPython 实现细节:用户不应触碰
__builtins__
;这严格来说是一个实现细节。想要覆盖builtins
命名空间中的值的用户应该导入__builtin__
(no 's')模块并适当地修改其属性。