2015-03-06 2 views
1

В Python есть несколько built-in functions. Возьмите, например, open. Я могу запустить консоль Python и получить некоторую информацию о open, выполнив следующие действия:Отменить перезапись Python Встроенный

>> open  
>>(built-in function open) 

Но если бы я сделать что-то вроде этого:

>> # I know it's bad practice to import all items from the namespace  
>> from gzip import *  
>> open  
>>(function open at 0x26E88F0) 

Оказывается, что для остальной части мой сеанс консоли, все вызовы функции open не будут использовать встроенную функцию, кроме той, которая находится в модуле gzip. Есть ли способ переопределить встроенную функцию в Python в исходное? Это легко, если у меня есть ссылка на нужную функцию, как показано ниже:

def MyOpen(path): 
    print('Trivial example') 

open = MyOpen 

Как получить ссылку для встроенных функций, как только эти ссылки были перезаписаны?

ответ

12

Вы можете просто удалить глобальный:

del open 

или вы можете импортировать __builtin__ module (Python 2) или builtins module (Python 3), чтобы получить к оригиналу:

import __builtin__ 

__builtin__.open 

поиска имен перейти сначала в ваше глобальное пространство имен, затем во встроенное пространство имен; если вы удалите глобальное имя open, это больше не будет мешать, и поиск имени перейдет к встроенному пространству имен или вы сможете получить доступ к этому пространству имен непосредственно через импортированный модуль.

Смежные вопросы