Python:包中的一些东西是可见的,另一些东西是不可见的

Python:包中的一些东西是可见的,另一些东西是不可见的,python,package,visibility,Python,Package,Visibility,包结构: World\ __init__.py Chip\ __init__.py grass.py snow.py water.py (两个\uuuu init\uuuu.py都是空的。) 当我使用world.chip import*时,我可以使用grass.grass,但不能使用snow.snow。为什么会这样 MUSIC = { grass.Grass: "mus_grass",

包结构:

World\
    __init__.py
    Chip\
        __init__.py
        grass.py
        snow.py
        water.py
(两个
\uuuu init\uuuu.py
都是空的。) 当我使用world.chip import*时,我可以使用
grass.grass
,但不能使用
snow.snow
。为什么会这样

MUSIC = {
         grass.Grass: "mus_grass",
         snow.Snow: "mus_snow",
         water.Water: "mus_water",
         "default": "mus_grass"
         }

name错误:未定义名称“snow”

不是正确的方法,但您可以强制加载包:

# in your world/chip/__init__.py
from grass import *
from snow import *
from water import *
# Your structure dirs
$ tree
.
`-- world
    |-- __init__.py
    `-- chip
        |-- __init__.py
        |-- grass.py
        |-- snow.py
        |-- water.py
然后,当您导入
芯片
模块时,您将加载所有其他软件包:

# in your world/chip/__init__.py
from grass import *
from snow import *
from water import *
# Your structure dirs
$ tree
.
`-- world
    |-- __init__.py
    `-- chip
        |-- __init__.py
        |-- grass.py
        |-- snow.py
        |-- water.py
在您的
shell中

$ python
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'help']
>>> from world.chip import *
>>> dir()
['Grass', 'Snow', 'Water', '__builtins__', '__doc__', '__name__', '__package__', 'grass', 'help', 'snow', 'water']

如果
\uuuu init\uuuuu.py
为空,则没有理由期望来自world.chimp import*的
将引入snow或grass模块

您的帖子表明它引入了grass模块,但我们无法在您的系统上看到所有内容


是否有一个
world/\uuuu init\uuuuuuuuuupy
它可能有一个来自黑猩猩的
导入草
来解释这种行为。您还可能有一个潜伏在周围的pyc,即使py文件如您所描述的那样

我自己仍在思考这个问题,但我相信您需要明确地告诉包的
芯片
部分,当使用
*
通配符时,Python应该导入哪些子模块。在
芯片
文件夹的
初始化
中,添加以下内容:

__all__ = ["grass", "snow", "water"]

没有这个添加,我在
grass
上得到一个
namererror
。通过此更改,不会出现错误。

您还有其他导入吗?