python基础-生成包、导入模块、包下_init_模块(__all__方法)

来源:互联网 发布:生产线电子看板数据 编辑:程序博客网 时间:2024/05/18 06:25

        • 生成包
        • 导入包下的模块以及包下_init_初始化模块
        • _init_下的_all__方法

生成包

我们通过代码生成系列包

#什么是包:一群模块文件的集合+__init__#py2 : 必须有__init__#py3:不是必须的了import osos.makedirs('glance/api')os.makedirs('glance/cmd')os.makedirs('glance/db')l = []l.append(open('glance/__init__.py','w'))l.append(open('glance/api/__init__.py','w'))l.append(open('glance/api/policy.py','w'))l.append(open('glance/api/versions.py','w'))l.append(open('glance/cmd/__init__.py','w'))l.append(open('glance/cmd/manage.py','w'))l.append(open('glance/db/models.py','w'))map(lambda f:f.close() ,l)

看下项目列表结构
这里写图片描述

导入包下的模块、以及包下_init_初始化模块

关于包相关的导入语句也分为import和from … import …两种,但是无论哪种,无论在什么位置,在导入时都必须遵循一个原则:凡是在导入时带点的,点的左边都必须是一个包,否则非法。可以带有一连串的点,如item.subitem.subsubitem,但都必须遵循这个原则。

我们在生成api包下的policy.py里面写入一段代码如下:

print("policy")

我们在生成api包下的init.py里面写入一段代码如下:

print("api init")

然后导入api包下的policy.py的模块

from glance.api import policy,versions# from glance import api.policy(这样写法错误的)

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/4.包.pyapi initpolicyProcess finished with exit code 0

不管是哪种方式,只要是第一次导入包或者是包的任何其他部分,都会依次执行包下的init.py文件(我们可以在每个包的文件内都打印一行内容来验证一下),这个文件可以为空,但是也可以存放一些初始化包的代码。

_init_下的_all__方法

这里写图片描述
init.py

print("api init")x=10def func():    print('from api.__init.py')__all__=['x','func','policy']

policy.py

print("policy")

versions.py

print("--version--")

然们导入上面的包下的模块

from glance.api import *print(x)func()

输出如下:

E:\python\python_sdk\python.exe E:/python/py_pro/4.包.pyapi initpolicy10from api.__init.pyProcess finished with exit code 0

我们看到在versions.py中的print(“–version–”)么有输出,因为all=[‘x’,’func’,’policy’]没有包含在内,故不能导入该模块

原创粉丝点击