Reputation: 2629
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.)
Upvotes: 54
Views: 21842
Reputation: 191
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 = myisinstance
work is done
__builtin__.isinstance = None
__builtin__.isinstance = X
Upvotes: 0
Reputation: 250961
You can use builtins
:
>>> import builtins
>>> builtins.set
<class 'set'>
For Python 2, you can use __builtin__
:
>>> import __builtin__
>>> __builtin__.set
<type 'set'>
or simply(no imports required):
>>> __builtins__.set
<type '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.
Upvotes: 10
Reputation: 1122172
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.
Upvotes: 93