2013-05-21 65 views
0

我被要求将某些功能添加到最初由其他人编写的代码中。 有一个Python代码定义了覆盖建设open功能是否有可能访问在Python中被覆盖的原始函数

def open(xxx): 
    ... 

我想访问同一Python文件原始open功能的功能。

最好的方法是改变自定义名称open。但我不想改变它,因为它是一个可以有许多其他文件访问此方法的拥抱系统。

那么,有没有办法在open中访问构建版本,即使它被覆盖?

+0

同意,它是重复的。 – user1817188

回答

2

的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__(否'') 模块并适当修改其属性。

+0

感谢您的快速回答^ _ ^ – user1817188

3
>>> __builtins__.open 
<built-in function open> 

工程在Python2和Python3

相同
2

访问功能的覆盖版本更普遍的方式是这样的:

oldVersionOfOpen = open 
def open(...): 
    oldVersionOfOpen(...) 

事实上,功能只能用于变量一个值(这是一个可调用的),所以你也可以将它们分配给其他变量来存储它们。

你甚至可以做这样的:

def newOpen(...): 
    pass # do whatever you'd like to, even using originalOpen() 

originalOpen, open = open, newOpen # switch 
相关问题