Python 如何恢复我意外重写的内置文件?
我在一个交互式python会话中将Python 如何恢复我意外重写的内置文件?,python,built-in,Python,Built In,我在一个交互式python会话中将set用作变量名时意外地重写了它-有没有任何方法可以让我不必重新启动会话就可以访问原始的set函数 (我在那节课上有很多东西,我不想做,当然如果必要的话我可以做。)你可以使用\uuuuuuu内置的: >>> import __builtin__ >>> __builtin__.set <type 'set'> 导入内置的__ >>>内置设备 或者简单地说(不需要导入): >>\uuuuuuuuuuuuuuuuu
set
用作变量名时意外地重写了它-有没有任何方法可以让我不必重新启动会话就可以访问原始的set
函数
(我在那节课上有很多东西,我不想做,当然如果必要的话我可以做。)你可以使用
\uuuuuuu内置的:
>>> import __builtin__
>>> __builtin__.set
<type 'set'>
导入内置的__
>>>内置设备
或者简单地说(不需要导入):
>>\uuuuuuuuuuuuuuuuuuuuuu.set
:
导入内置代码
>>>内置组件
发件人:
CPython实施细节:用户不应触摸\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu;信息技术
严格来说,这是一个实现细节。想要覆盖值的用户
在内置项
名称空间中,应导入\uuuuuuuuuuuuuuuuuuuuuuuuu内置项
(否)
并适当修改其属性
只需删除隐藏内置项的名称:
>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>
如果在定位屏蔽名称的定义位置时遇到问题,请检查从当前名称空间到内置名称空间的所有名称空间;查看哪些作用域可能适用于您当前的情况。要使用内置包装器,请首先在X
工作完成后,将其设置为None
,并将原始地址设置回内置函数
范例
X=\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuiInstance
\uuuuuuuuuuuuuiInstance=myininstance
工作完成了
__builtin__.isinstance=None
__builtin__.isinstance=X
在Python 3中不适用于我。当我删除open
时,我发现一个错误,即没有定义它。@TomášZato:那么您从未在当前名称空间中创建一个名称来屏蔽它。如果没有一个例子,我不能告诉你们更多,也许你们想为此提出新的问题?请不要假设你有完全相同的情况,请在投票前在新的会议中测试你的假设。我在回答中所描述的工作原理与Python 3所示完全相同。很抱歉,我确实误解了这种情况。在我的例子中,open实际上是通过内置模块替换的,而不仅仅是局部变量的别名。@TomášZato:对,我已经更新了这个问题,明确指出您需要检查所有范围,包括内置的作用域。那么,如果builtins.open
方法被更改了,我该怎么办?@TomášZato,那么据我所知,无法将其取回。如果您的应用程序需要这样做,那么您应该保持对这些变量的引用完整。
>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>
>>> import builtins
>>> builtins.set
<type 'set'>
__builtin__.isinstance=None
__builtin__.isinstance=X