How to restore a builtin that I overwrote by accident?

Question:

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.)

Asked By: weronika

||

Answers:

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.

Answered By: Ashwini Chaudhary

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.

Answered By: Martijn Pieters

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 
    
Answered By: Sagar
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.