Python3学习笔记:包

版权声明:本文为博主原创文章,未经博主允许不得转载。 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下的子包。

猜你喜欢

转载自blog.csdn.net/daihuimaozideren/article/details/80812998