2016-01-21 76 views
0

我有以下封裝結構:導入類從子模塊成(化名)命名空間

package_name/ 
    __init__.py 
    some_module.py 
    another_module.py 
    # other classes 

我使用的是從另一個Python文件這個包,其中我想做到以下幾點:

  • 聲明一個別名package_name

    import package_name as pn 
    
  • ,並且指到內部some_module.py類,another_module.py等如下:

    instance = pn.SomeClass(pn.AnotherClass(x, y)) 
    

    即省略模塊名稱,而是僅使用包名稱的別名。

事情是這樣的:

import package_name as pn 
from package_name import some_module to pn 

是這樣的,或任何等價物,可能嗎?


我可以這樣做:

from package_name.some_module import SomeClass 
from package_name.another_module import AnotherClass 
instance = SomeClass(AnotherClass(x, y)) 

這:

import package_name.some_module 
import package_name.another_module 
instance = pn.some_module.SomeClass(pn.some_module.AnotherClass(x, y)) 

但這不起作用

import package_name.some_module as pn 
import package_name.another_module as pn 
instance = pn.SomeClass(pn.AnotherClass(x, y)) 

因爲第二as pn覆蓋的第一個。

回答

1

從包裝導入單個模塊的語法是:

from package_name import some_module as pn 

已經從package_name到其它模塊中定義的類訪問,做正確的事情是導入這些類,顯式地或使用一些工具,到__init__.py文件中程序包:

package_name/__init__.py

from .some_module import a_class 
from .another_module import another_class 

和Tha噸將允許你只是做:

import package_name as pn 
pn.a_class 
+0

謝謝。你的第一個建議不適用於多個'import',但是在'__init __。py'中導入這些類會起到一定作用。 – emlai