希望我的问题不会让我陷入Python的耻辱殿堂。在
总之,我有一个包poo
,它当前只包含一个模块moo
。将来,poo
(例如poo.moose
)中可能会有其他模块。{{{cd2>的所有东西都是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
代码。基于这个原因,我下面的详细回答给出了这些额外的细节。在
结果很简单。在包
poo/__init__.py
中,只需将模块导入包命名空间中(绝对):就这样。现在当有一个
poo.moo.a()
时,它也将变成poo.a()
的可访问性。在请注意,包定义不会被(子)模块导入覆盖,正如我的意图:
poo.moo.version=42
不会覆盖poo.version=13
。正是所需要的。在我现在注意到,我仍然被其他模块化语言所迷惑,这些语言的导入对模块是私有的。但在Python中,所有内容都是以普通视图显示的,模块/包中的包导入也是如此。在
相关问题 更多 >
编程相关推荐