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
。通过此更改,不会出现错误。您还有其他导入吗?