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

生成包

我们通过代码生成系列包

#什么是包:一群模块文件的集合+__init__
#py2 : 必须有__init__
#py3:不是必须的了

import os
os.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.包.py
api init
policy

Process finished with exit code 0

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

_init_下的_all__方法

这里写图片描述
init.py

print("api init")

x=10

def 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.包.py
api init
policy
10
from api.__init.py

Process finished with exit code 0

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值