I accidentally overwrote set
by using it as a variable name in an interactive python session - is there any way that I can get access to the original set
function without just restarting my session?
(I have so much stuff in that session that I'd rather not have to do that, although of course I can if necessary.)
Just delete the name that is masking the builtin:
>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>
You can always still access the original built-in through the __builtins__
namespace; use this if you want to override the built-in but want to defer to the original still from the override:
>>> __builtins__.set
<type 'set'>
__builtins__
is sourced from the __builtin__
module (Python 2, note the lack of s
), or the builtins
module (Python 3, with s
but no underscores).
If you have trouble locating where the masking name is defined, do check all namespaces from your current one up to the built-ins; see Short Description of the Scoping Rules? for what scopes may apply to your current situation.
You can use __builtin__
:
>>> import __builtin__
>>> __builtin__.set
<type 'set'>
or simply(no imports required):
>>> __builtins__.set
<type 'set'>
>>> import builtins
>>> builtins.set
<class 'set'>
From docs:
CPython implementation detail: Users should not touch
__builtins__
; it is strictly an implementation detail. Users wanting to override values in thebuiltins
namespace should import the__builtin__
(no ‘s’) module and modify its attributes appropriately.
To use builtin wrapper, first assign its original address in a variable like X
After your work is done then set it to None
and set back the original address to builtin function.
Example
X= __builtin__.isinstance
__builtin__.isinstance = myininstance
work is done
__builtin__.isinstance=None __builtin__.isinstance=X
来源:https://stackoverflow.com/questions/17152760/how-to-restore-a-builtin-that-i-overwrote-by-accident