Python3:如何在包级别提供方便的模块导出?

2024-10-01 05:06:03 发布

您现在位置:Python中文网/ 问答频道 /正文

希望我的问题不会让我陷入Python的耻辱殿堂。在

总之,我有一个包poo,它当前只包含一个模块moo。将来,poo(例如poo.moose)中可能会有其他模块。{{{cd2>的所有东西都是import poo.moo,import poo.moo as moo,和(gasp!)import poo.*。你知道,省去打字是件好事。在

所以我的想法(希望不是完全错的)是将模块poo.moo的“导出”(函数、变量、类,…)复制到poo,在__init.py__中。不过,我不想覆盖poo中的任何现有定义。在

实现这一目标的正确、良好、适当和有效的方法是什么?(我用过“理想”吗?不!)或者这是个坏主意?或者说,这条精力充沛的Python是“现在为了完全不同的东西”?;)

哦,我的包裹只有Python。在

请注意,In python, how do you import all classes from another module without keeping the imported module's namespace?给出了答案,但不知道这将如何应用于Python包的__init__.py代码。基于这个原因,我下面的详细回答给出了这些额外的细节。在


Tags: 模块函数moosepyimportinitasmodule
1条回答
网友
1楼 · 发布于 2024-10-01 05:06:03

结果很简单。在包poo/__init__.py中,只需将模块导入包命名空间中(绝对):

from poo.moo import *

就这样。现在当有一个poo.moo.a()时,它也将变成poo.a()的可访问性。在

请注意,包定义不会被(子)模块导入覆盖,正如我的意图:poo.moo.version=42不会覆盖poo.version=13。正是所需要的。在

我现在注意到,我仍然被其他模块化语言所迷惑,这些语言的导入对模块是私有的。但在Python中,所有内容都是以普通视图显示的,模块/包中的包导入也是如此。在

相关问题 更多 >