0

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

def open(xxx):
   ...

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

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

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

4

3 回答 3

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

在 Python2 和 Python3 中工作相同

于 2013-05-21T11:20:37.220 回答
2

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

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

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

你甚至可以这样做:

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

originalOpen, open = open, newOpen  # switch
于 2013-05-21T11:22:53.027 回答
2

蟒蛇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')模块并适当地修改其属性。

于 2013-05-21T11:20:17.710 回答