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<
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
You can use __builtin__
:
>>> import __builtin__
>>> __builtin__.set
<type 'set'>
or simply(no imports required):
>>> __builtins__.set
<type 'set'>
For Python 3:
>>> 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.
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 module (__builtin__ on Python 2, with underscores and no s
); use this if you want to override the built-in but want to defer to the original still from the override:
>>> import builtins
>>> builtins.set
<type 'set'>
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.