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()
放在一个单独的文件 line.py
中,这样就不需要去修改 draw.py
。可是,如果我把它放在一个单独的文件里,它会被导入成:
from mygraph.line import line
这不是我想要的...
有没有办法可以“别名”一下 line.py
,让它在 draw
模块中可见,但又放在一个单独的文件里?我考虑过在 draw
里添加一个虚拟函数:
def line():
return real_line.line()
但这样的话,我就得不到原始 line
的“文档字符串”,而且在调用真正的 line 函数时会损失一些性能。
3 个回答
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
,因为这样会导致循环导入的问题。
5
在你的 draw.py
模块里试试这个:
from line import line
这样你就可以用 mygraph.draw.line
来调用它了,而且可以按照你想要的方式导入。
我在我的 __init__.py
文件里经常这样做:以这种方式展示主要的接口。