How to restore a builtin that I overwrote by accident?
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.
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