我有一个这样的目录结构:
foo/
__init__.py
printsum.py
'''
def printsum(x,y):
print("sum is " + str(x+y))
'''
bar.py
'''
def printsum(x,y):
print("sum is " + str(x+y))
'''
example.py
'''
#!/usr/bin/env python3
import foo.printsum
import bar
foo.printsum.printsum(1,2)
bar.printsum(3,4)
'''
该文件example.py
旨在作为脚本运行,而foo
和bar
旨在作为导入模块。我想提出的命名空间foo
一样bar
。那就是 - 我不想要 double printsum.printsum
。我不希望所有的的foo
模块将被保存在一个大的整体的文件,像bar.py
。我希望该foo.printsum()
方法本身保存在一个文件中,但我希望printsum()
存在于foo.
命名空间级别。
这可以以某种方式完成吗?
中的函数导入__init__py
。
foo/__init__py:
from .printsum import printsum
(如果您使用的是 python2,则可能需要删除点或使用完整的导入路径。python 3 中相对导入路径的规则更严格)
然后你可以直接从 foo 调用函数:
import foo
foo.printsum(...)
该foo
进口将运行__init__
。如果你想要证明,你也可以在那里添加一些印刷品。这是在包模块中公开功能的一种非常正常的方式。你也可以做 * 导入,但通常不推荐这样做。严格导入您想要公开的内容。
__init__
换句话说,您可以将东西粘贴到包上,但也可以在导入时进行自动初始化。
还要查找__all__
关键字。隐藏与包或模块的用户无关的代码非常有用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句