覆盖__builtins__函数无法使用导入

时间:2014-03-15 13:45:43

标签: python python-2.7 built-in

在这里,我试图覆盖__builtins__函数:

>>> lisa = __builtins__.list
>>> list('123')
['1', '2', '3']
>>>

它的工作方式与我期望的一样。

现在我试图覆盖import

>>> importing = __builtins__.__import__
>>> importing sys
  File "<stdin>", line 1
    importing sys
            ^
SyntaxError: invalid syntax
>>> import sys
<module 'sys' (built-in)>
>>>

当我尝试覆盖导入时,为什么它不起作用?

1 个答案:

答案 0 :(得分:3)

您无法在Python中创建新的关键字和语句; import is a statementimporting不是。

您所做的只是将__import__ built-in function绑定到一个新名称;你甚至不需要使用__builtins__模块来做到这一点:

importing = __import__

sys = importing('sys')

__builtins__名称是CPython实现细节,与关键字无关;它是Python查找内置函数,类型和常量的位置。另请参阅__builtin__ module(否s)。

要执行您想要的操作,需要扩展Python解析器,将importing识别为import的别名。