关于__all__属性
来源:7-9 __init__.py 的用法

易萧
2020-08-02
package1/package1_sub1/init.py
__all__ = ['demoo']
package1/demo.py
from package1_sub1 import *
print(demoo.a)
如上,我在package1/package1_sub1/init.py里写上了__all__=[‘demoo’]后,再在demo.py里直接使用demoo.a是可以的,运行正常。
但是如果没有写上__all__=[‘demoo.py’](空的__init__.py文件),运行就会出现如下提示:
- NameError: name ‘demoo’ is not defined.
all__属性不是用来限制的吗,如果__init.py中没有对__all__的范围指定一个具体列表,那么在导入该包的时候,应该是导入其下的所有模块才对吧。
可是现在看来,如果想要直接一次性导入所有package1_sub1包里的模块,还必须把所有模块都添加到所属包的__all__的列表里?
写回答
2回答
-
7七月
2020-08-03
__all__ 在__init__中写的时候,指定自动导出的包。如果没有在__init__的all中定义的包不会被自动导出
__all__在模块中写的时候,只有在__all__中指定的变量名才会被导出,如果没有__all__则全部导出
好好体会下,模块和包的导出区别
00 -
7七月
2020-08-03
__all__确实是用来限制的,我不太清楚你具体的测试代码,建议再重新看一遍是不是有什么误区
022020-08-03
相似问题