版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/daihuimaozideren/article/details/80812998
若目录下存在__init__.py,则该目录被python视为一个包(package)。
__init__.py也是一个模块,可以编写代码。但其主要功能是定义__all__。
当执行from packageName import *时,仅导入__all__所指定的内容。
__all__默认为package下所有模块,但不包括子package。
例如,目录结构为
在P1下的__init__.py中,重新定义__all__为
__all__=["m1"]
在tester.py中,依次调用m1,m2,m3
from p1 import *
if __name__ == '__main__':
m1.fun1()
print("m1.a=",m1.a)
m2.fun1()
m3.fun1()
虽然P2在P1目录下,且调用了from p1 import * ,但IDE会报错,提示未找到m2,m3。可见,由于m2未出现在P1的__all__中,所以未被引入。
当我们不再给__all__赋值,或将其修改为
__all__=["m1","m2"]
会发现,m2可以被识别,但m3仍为unresolved import。
可见,from p1 import *,只会讲p1下__all__中指定的模块导入,不会导入p1下的子包。