是否可以访问已在python中覆盖的原始函数

时间:2013-05-21 11:18:51

标签: python function overwrite

我被要求在最初由其他人编写的代码中添加一些功能。 有一个python代码定义了一个函数,它覆盖了open函数

中的构建
def open(xxx):
   ...

我想在同一个python文件中访问原始open函数。

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

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

3 个答案:

答案 0 :(得分:3)

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

在Python2和Python3中使用相同的工作

答案 1 :(得分:2)

Python 2:

>>> import __builtin__
>>> __builtin__.open
<built-in function open>

Python 3:

>>> import builtins
>>> builtins.open
<built-in function open>

请勿使用__builtins__

来自docs

  

CPython实施细节:用户不应触及__builtins__;它   严格来说是一个实现细节。想要覆盖值的用户   在builtins命名空间中应导入__builtin__(否's')   模块并适当地修改其属性。

答案 2 :(得分:2)

访问函数的覆盖版本的更一般方法是:

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

实际上,函数只是具有值(可调用)的变量,因此您也可以将它们分配给其他变量来存储它们。

你甚至可以这样做:

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

originalOpen, open = open, newOpen  # switch