How to restore a builtin that I overwrote by accident? How to restore a builtin that I overwrote by accident? python python

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'>

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 the builtins 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

  1. X= __builtin__.isinstance
  2. __builtin__.isinstance = myininstance
  3. work is done

    __builtin__.isinstance=None __builtin__.isinstance=X