español - round python 3
¿Cómo restaurar un builtin que sobrescribí por accidente? (3)
Para usar la envoltura incorporada, primero asigne su dirección original en una variable como X
Una vez que haya terminado su trabajo, configúrelo en None
y restablezca la dirección original a la función incorporada.
Ejemplo
-
X= __builtin__.isinstance
-
__builtin__.isinstance = myininstance
El trabajo está hecho
__builtin__.isinstance=None __builtin__.isinstance=X
Accidentalmente sobrescribí el set
al usarlo como nombre de variable en una sesión interactiva de Python. ¿Hay alguna forma de que pueda acceder a la función de set
original sin tan solo reiniciar mi sesión?
(Tengo tantas cosas en esa sesión que prefiero no tener que hacer eso, aunque por supuesto que puedo si es necesario).
Puedes usar __builtin__
:
>>> import __builtin__
>>> __builtin__.set
<type ''set''>
o simplemente (no se requieren importaciones):
>>> __builtins__.set
<type ''set''>
>>> import builtins
>>> builtins.set
<class ''set''>
De los docs :
Detalle de la implementación de CPython : Los usuarios no deben tocar
__builtins__
; Es estrictamente un detalle de implementación. Los usuarios que deseen anular los valores en el espacio de nombresbuiltins
deben importar el__builtin__
(no ''s'') y modificar sus atributos de manera apropiada.
Simplemente borre el nombre que está enmascarando el builtin:
>>> set = ''oops''
>>> set
''oops''
>>> del set
>>> set
<type ''set''>
Siempre puede seguir accediendo al original incorporado a través del espacio de nombres __builtins__
; utilícelo si desea anular la función incorporada pero desea transferirla al original aún de la anulación:
>>> __builtins__.set
<type ''set''>
__builtins__
se obtiene del módulo __builtin__
(Python 2, tenga en cuenta la falta de s
), o el módulo builtins
(Python 3, con s
pero sin guiones bajos).
Si tiene problemas para ubicar donde se define el nombre de máscara, verifique todos los espacios de nombres desde su actual hasta los incorporados; ¿Ver descripción breve de las reglas de alcance? para qué ámbitos pueden aplicarse a su situación actual.