我在交互式python会话中使用它作为变量名称意外覆盖了set
- 有没有什么方法可以访问原始set
函数而不只是重新启动会话?
(我在那个会话中有很多东西,我宁愿不必这样做,虽然我当然可以在必要的时候。)
答案 0 :(得分:39)
只需删除屏蔽内置的名称:
>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>
您始终可以通过__builtins__
命名空间访问原始内置内容;如果要覆盖内置但想要从覆盖中推迟原始静止,请使用此选项:
>>> __builtins__.set
<type 'set'>
__builtins__
来自__builtin__
module(Python 2,请注意缺少s
)或builtins
module(Python 3,s
但来自没有下划线)。
如果您无法找到定义屏蔽名称的位置,请检查当前命名空间到内置插件的所有命名空间;请参阅Short Description of the Scoping Rules?了解适用于您当前情况的范围。
答案 1 :(得分:6)
您可以使用__builtin__
:
>>> import __builtin__
>>> __builtin__.set
<type 'set'>
或简单(不需要导入):
>>> __builtins__.set
<type 'set'>
>>> import builtins
>>> builtins.set
<class 'set'>
来自docs:
CPython实施细节:用户不应触及
__builtins__
;它 严格来说是一个实现细节。想要覆盖值的用户 在builtins
命名空间中应导入__builtin__
(否's') 模块并适当地修改其属性。
答案 2 :(得分:0)
要使用内置包装器,请先在X
完成工作后,将其设置为None
并将原始地址设置为内置功能。
示例
X= __builtin__.isinstance
__builtin__.isinstance = myininstance
工作已完成
__builtin__.isinstance=None
__builtin__.isinstance=X