How to restore a builtin that I overwrote by accident?

后端 未结 3 821
执笔经年
执笔经年 2020-11-29 08:15

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<

相关标签:
3条回答
  • 2020-11-29 08:30

    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 
      
    0 讨论(0)
  • 2020-11-29 08:37

    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.

    0 讨论(0)
  • 2020-11-29 08:47

    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.

    0 讨论(0)
提交回复
热议问题