python包自我理解
1、python包
文件夹下有__init__.py
文件,这个文件夹就是一个包,(.py文件为模块)
可以通过imort
包名(也就是文件夹名称)导入包,当执行import
包名时python会加载__init__.py
文件
可以在__init__.py
文件指定导入的模块,那样在导包时就会导入指定模块
包可以嵌套,包下面还有包
__all__
指定包里导入模块,如果from XX imoirt *
就导入__all__
里面全部模块
注意,使用 from package import item
时,item 可以是包的子模块(或子包),也可以是包中定义的函数、类或变量等其他名称。import
语句首先测试包中是否定义了 item;如果未在包中定义,则假定 item 是模块,并尝试加载。如果找不到 item,则触发 ImportError
异常。
相反,使用 import item.subitem.subsubitem
句法时,除最后一项外,每个 item 都必须是包;最后一项可以是模块或包,但不能是上一项中定义的类、函数或变量。
2、测试代码
#目录
>abcd
>a
__init__.py
a.py
>b
b.py
__init__.py
test.py
testimport.py
# /abcd/a/__init__.py
from .a import AA
# /abcd/a/a.py
def AA():
print('AA')
# /abcd/b/b.py
def BB():
print('BB')
# /abcd/__init__.py
from .test import TestA
__all__ = ['a','b']
# /abcd/test.py
def TestA():
print('TestA')
if __name__ == '__main__':
TestA()
# /testimport.py
import abcd
abcd.TestA()
from abcd import *
a.AA()
# b.BB() #这个找不到的
print(dir(a))