2012-01-06 102 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