2013-04-02 132 views
0

我有这个文件strtucture:蟒蛇 “进口包装为” 奇怪的行为

mainfolder 
    package/ 
     __init__.py 
     packagefile.py 

__init__.py

import packagefile as othername 

如果我import package从mainfolder,package将有packagefileothername了。发生什么事 ?它是否导入两次?我有python 2.7.3。这是预期的行为?当我做import sys as something_else时,sys不会出现在当前的命名空间中。

回答

2

是的,这是预期的行为。基本上,软件包总是在其中定义模块。你在做什么也是导入其中一个模块作为另一个名字。这并不妨碍它已经被定义为它的原始名称。

我不认为这有任何不良后果。例如,是你进入交互终端,你应该看到这一点:

>>> package.packagefile is package.othername 
True 

这表明它们是同一个对象的引用 - 类似于C++,比较两个指针的例子。

但是,如果你只是想重命名一个模块成员,我建议只需重命名该文件。

+0

但是当我这样从'__init __。py'和'import package'中删除'import'语句时,packagefile也不会被导入。那么'__init __。py'有什么好处呢? – kissgyorgy

+0

'__init __。py'仍然需要将该文件夹指定为一个包。你可以通过'package.packagefile'和'package.packagefile'或者'from package import packagefile'来访问'package package.packagefile'并且'packagefile'访问 –

+0

你还应该阅读官方的Python模块文档 - http: //docs.python.org/2/tutorial/modules.html - 这里有很多细微差别和不同的方法来做我无法想到的事情。 –