2012-01-06 105 views
4

我有一些Python模塊,我導入爲:別名Python模塊

from mygraph.draw import pixel 

文件結構看起來像這樣:

mygraph/ 
    __init__.py 
    draw.py 

draw.py包含def pixel()

現在,我想要添加另一個功能,line(),我想將它導入爲

from mygraph.draw import line 

我可以簡單地將line加到draw.py。但是,我想在line.py的單獨文件中有line(),而不是亂用draw.py。但是,如果我把它放在一個單獨的文件,它將被導入爲

from mygraph.line import line 

,這是不是我想要的......

是否有可能爲「別名」不知何故line.py所以它是在draw模塊中可見,但在分離文件中?我想到了在draw

def line(): 
    return real_line.line() 

但在這種情況下,我不會有從原來的line一個「文檔字符串」添加僞功能,我將失去在調用真正的線功能的一些性能。

回答

5

draw.py模塊中試試這個:

from line import line 

,你應該能夠調用它作爲mygraph.draw.line,並導入你想要的方式。

我在__init__.py文件中做了很多工作:以這種方式公開主API。

+0

+1'the * primary * api' – n611x007 2013-05-27 06:17:07

3

一個簡單的方法是將以下行添加到draw.py

from line import line 

在這種情況下,你可以從draw.py導入line了。

4

結構這樣會更有意義給你:

mygraph/ 
    __init__.py 
    draw/ 
     __init__.py 
     pixel.py 
     line.py 

然後在draw/__init__.py你會有這樣的代碼:

from mygraph.draw.pixel import pixel, redpixel, greenpixel 
from mygraph.draw.line import line, redline, greenline 

而且可以很方便地使用你的包:

from mygraph.draw import redpixel, redline 

請注意循環進口。例如,如果line需要pixel才能正常工作,並且您在line.py中做import pixel,您不能在pixel.py中執行import line,因爲您正在運行到循環導入。

+0

關於循環進口的好評! – 2012-01-06 14:01:57