2013-04-02 64 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 - 這裏有很多細微差別和不同的方法來做我無法想到的事情。 –