Как восстановить встроенный, который я перезаписал случайно?
Я случайно перезаписал set
, используя его как имя переменной в интерактивном сеансе python - есть ли способ получить доступ к исходной функции set
, не перезапустив сеанс?
(В этом сеансе у меня так много вещей, что я не хочу этого делать, хотя, конечно, могу, если это необходимо.)
Ответы
Ответ 1
Просто удалите имя, которое маскирует встроенный файл:
>>> set = 'oops'
>>> set
'oops'
>>> del set
>>> set
<type 'set'>
Вы всегда можете получить доступ к встроенному оригиналу через пространство имен __builtins__
; используйте это, если вы хотите переопределить встроенный, но хотите отложить до исходного по-прежнему от переопределения:
>>> __builtins__.set
<type 'set'>
__builtins__
поступает из модуля __builtin__
(Python 2, обратите внимание на отсутствие s
) или builtins
module (Python 3, с s
, но без подчеркивания).
Если вам трудно найти, где определено имя маскировки, проверьте все пространства имен от вашего текущего до встроенных; см. Краткое описание правил определения области видимости?, для каких областей действия могут применяться к вашей текущей ситуации.
Ответ 2
Вы можете использовать __builtin__
:
>>> import __builtin__
>>> __builtin__.set
<type 'set'>
или просто (импорт не требуется):
>>> __builtins__.set
<type 'set'>
Для Python 3:
>>> import builtins
>>> builtins.set
<class 'set'>
Из docs:
Подробности реализации CPython. Пользователи не должны касаться __builtins__
; Это является строго описанием реализации. Пользователи, которые хотят переопределить значения в пространстве имен builtins
следует импортировать __builtin__
(no 's) модуль и соответствующим образом изменить его атрибуты.