1

这是一个简单的案例:我想在 python 名称机器人中定义一个模块。因此,我有一个名为 robots 的文件夹,其中包含以下两个文件:

__init__.py:

from test import a

测试.py:

a = "hello world"

现在,当我import robot在解释器中时,robot命名空间包括testa. 但是,我只希望它包含a. 为什么会有这种奇怪的行为?


编辑:

这是我想要实现的一个更具代表性的示例:

给定以下文件:

__init__.py:

from spam import a
import ham

垃圾邮件.py:

a = "hello world"

火腿.py:

b = "foo"

我可以有一个名称空间在其顶层robot包含aand但不是吗?hamspam

4

2 回答 2

0

您只是在问如何导入特定的模块或功能吗?

测试.py:

import robot.spam.a
import robot.ham

不要导入整个包。

于 2013-05-28T21:33:26.423 回答
0

您不仅创建了一个模块,还创建了一个包。一个包在其命名空间中包含其子模块(一旦它们被导入,就像您test在此处导入的那样)。这是应该的,因为使用包的通常方式是提供几个模块的分组。制作一个只有一个模块(即一个内容.py文件)的包并没有多大用处。

如果您只想要一个单文件模块,只需创建一个名为的文件robots.py并将您的代码放入其中。

编辑:请参阅上一个问题。答案是您通常不应该担心从包命名空间中排除模块名称。模块应该在包命名空间中。如果您还想从子模块中添加功能和东西,为了方便起见,这很好,但是通过“覆盖您的踪迹”并隐藏您导入的模块并没有真正获得任何东西。但是,正如该问题的答案中所述,有一些骇人听闻的方法可以近似您想要的内容。

于 2013-05-28T20:36:42.290 回答