如何恢复我不小心覆盖的内置函数?

问题描述 投票:0回答:3

我在交互式 Python 会话中将

set
用作变量名,不小心覆盖了它 - 有什么方法可以让我在不重新启动会话的情况下访问原始
set
函数?

(我在那次会议中有太多东西,我宁愿不必这样做,尽管如果有必要的话我当然可以。)

python built-in
3个回答
86
投票

只需删除掩盖内置名称的名称即可:

>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>

您始终可以通过

builtins
模块访问原始内置模块(Python 2 上的
__builtin__
,带下划线,没有
s
);如果您想覆盖内置但想要从覆盖中推迟到原始静止图像,请使用此功能:

>>> import builtins
>>> builtins.set
<type 'set'>

如果您无法找到屏蔽名称的定义位置,请检查从当前名称空间到内置名称空间的所有名称空间;请参阅范围规则的简短描述?了解哪些范围可能适用于您当前的情况。


10
投票

您可以使用

builtins

>>> import builtins
>>> builtins.set
<class 'set'>

对于 Python 2,您可以使用

__builtin__
:

>>> import __builtin__
>>> __builtin__.set
<type 'set'>

或者简单地(不需要进口):

>>> __builtins__.set
<type 'set'>

来自文档

CPython 实现细节:用户不应触摸

__builtins__
;它 严格来说是一个实施细节。想要覆盖值的用户 在
builtins
命名空间中应导入
__builtin__
(无“s”) 模块并适当修改其属性。


0
投票

要使用内置包装器,首先将其原始地址分配到像

X

这样的变量中

工作完成后,将其设置为

None
并将原始地址设置回内置函数。

示例

  1. X = __builtin__.isinstance
    
  2. __builtin__.isinstance = myisinstance
    
  3. 工作完成了

    __builtin__.isinstance = None
    __builtin__.isinstance = X
    
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.