gpt4 book ai didi

python - 如何将子模块导入父命名空间?

转载 作者:行者123 更新时间:2023-12-04 16:54:35 24 4
gpt4 key购买 nike

我有一个这样的目录结构:

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旨在作为脚本运行,而 foobar意味着是导入的模块。我想创建 foo 的命名空间喜欢 bar .那就是 - 我不想要双 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__关键词。隐藏与包或模块的用户无关的代码非常有用。

关于python - 如何将子模块导入父命名空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43685233/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com