python 包 __all__

  • 模块: .py文件
  • 包:在一个文件夹下有多个.py文件,并且有__init__.py 文件
  • import 包 导入包时__init__.py被执行,如果__init__.py为空,则无法使用模块,如果既把模块也导入了
  • 那么将来可以调用包里面的模块。
  1.  下面有sendmsg.py 和recive.py模块 以及__init__.py 存在于Testmsg文件夹下;

main.py 采用 sendmsg.test1()

  • 根据 main.py 中的 from TestMsg import * 和 __init__中的__all__来导入模块;
  • 比如__all__中只有sendmsg模块 那么最后只有sendmsg 模块被导入
#receive.py

def test2():
    print("-----recvmsg-test2---")
#sendmsg.py

def test1():
    print("----sendmsg-test1-----")
#__init__.py

__all__ = ["sendmsg"]
#main.py

 '''导入Testmsg 这个包,Testmsg含有sendmsg.py、recive.py模块以及__init__.py
当导入这个包的时候会首先执行 __init__.py,所以如果__init__.py 有打印语句那么将会打印'''
from TestMsg import *

sendmsg.test1()#调用模块sendmsg.py中的test1方法

main.py 采用 Testmsg.sendmsg.test1()

  • main.py中直接是 import TestMsg 所以根据__init__来导入所需的模块
  • from TestMsg import * 这句此时放在__init__.py里面,main.py 执行 import  TestMsg 会首先运行__init__.py,所以sendmsg会导入到Testmsg这个包里面(暂且这么认为),因此在调用的时候要加上包的名字
#__init__.py

__all__ = ["sendmsg"]

from TestMsg import * #导入TestMsg包中的所有模块,但__all__中只有 sendmsg所以最后只导入sendmsg模块

#from . import recvmsg #从当前路径下导入recvmsg 模块
#main.py

 '''导入Testmsg 这个包,Testmsg含有sendmsg.py、recive.py模块以及__init__.py
当导入这个包的时候会首先执行 __init__.py,所以如果__init__.py 有打印语句那么将会打印'''
import Testmsg

Testmsg.sendmsg.test1()#调用模块sendmsg.py中的test1方法

 

你可能感兴趣的:(python)