我被要求将某些功能添加到最初由其他人编写的代码中。 有一个Python代码定义了覆盖建设open
功能是否有可能访问在Python中被覆盖的原始函数
def open(xxx):
...
我想访问同一Python文件原始open
功能的功能。
最好的方法是改变自定义名称open
。但我不想改变它,因为它是一个可以有许多其他文件访问此方法的拥抱系统。
那么,有没有办法在open
中访问构建版本,即使它被覆盖?
我被要求将某些功能添加到最初由其他人编写的代码中。 有一个Python代码定义了覆盖建设open
功能是否有可能访问在Python中被覆盖的原始函数
def open(xxx):
...
我想访问同一Python文件原始open
功能的功能。
最好的方法是改变自定义名称open
。但我不想改变它,因为它是一个可以有许多其他文件访问此方法的拥抱系统。
那么,有没有办法在open
中访问构建版本,即使它被覆盖?
的Python 2:
>>> import __builtin__
>>> __builtin__.open
<built-in function open>
的Python 3:
>>> import builtins
>>> builtins.open
<built-in function open>
不要使用__builtins__
:
从docs:
CPython的实现细节:用户应不要uch
__builtins__
;它 严格是一个实现细节。要在builtins
名称空间中覆盖值 的用户应导入__builtin__
(否'') 模块并适当修改其属性。
感谢您的快速回答^ _ ^ – user1817188
>>> __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
同意,它是重复的。 – user1817188