weronika
weronika

Reputation: 2629

How to restore a builtin that I overwrote by accident?

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

Answers (3)

Sagar
Sagar

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

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

    __builtin__.isinstance = None
    __builtin__.isinstance = X
    

Upvotes: 0

Ashwini Chaudhary
Ashwini Chaudhary

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 the builtins namespace should import the __builtin__ (no ‘s’) module and modify its attributes appropriately.

Upvotes: 10

Martijn Pieters
Martijn Pieters

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

Related Questions