在前面章节老猿介绍了包下模块及子包的加载的各种方式,并说明包的加载首先是自动加载包下的__init__.py文件。在《第10.6节 Python包的概念》中介绍了__init__.py文件的作用主要用于包内模块的加载,那么使用__init__.py来加载包的模块有什么好处呢?

我们先来看例子,下面例子还是以《第10.7节 Python包的和子包定义步骤》中规划的包为基础来介绍的,本节唯一的变化是包goodspricequery的__init__.py增加了两行增加注释的内容,如下:

#package goodspricequery's __init__.py
'''package goodspricequery is a example of module and package,inculding:
1.subpackage:dataaccess
2.module:mainwin
'''
print('Start loading packeg:goodspricequery ...')
goodspricequeryloaded=True
dataaccessloaded=False from goodspricequery.dataaccess import * #增加导入包下子包
from goodspricequery.mainwin import * #增加导入包下模块 input('Package goodspricequery loaded!Press Enter to exit.')。

我们执行包goodspricequery的加载:

>>> import goodspricequery
Start loading packeg:goodspricequery ...
Start loading dataaccess package ...
Package dataaccess loaded!
Module:mainwin start load...
Module:mainwin loaded.
Package goodspricequery loaded!Press Enter to exit.
>>> goodspricequery.mainwin()
I'm mainwin
>>> goodspricequery.dataaccessloaded
True
>>>

执行截图:



从上述执行来看,通过包的__init__.py使用import *加载的包下和子包下的模块成员,都可以通过“包名.成员”方式进行访问,这样对外提供能力时,调用者无需关注提供能力的模块是哪个,相关功能都认为是包的功能,此时的包对调用者来说就跟一个独立的模块文件一样。

类似的,凡是导入后属于调用者无需加包名和模块名就可以访问的导入方法如“from 包名.模块名 import 成员 ”、“import 包名.子包名.模块名 as 模块别名”等,相关的导入模块属性或模块本身都可以通过“包名.”方式访问。

本节介绍的通过包的__init__.py特定的导入方法导入的内容,都可以通过”包名.”方法访问,而无需关注相关属性的模块文件或子包文件,体现了一个包作为一个整体提供服务的能力。

第10.10节 Python使用__init__.py自动加载包下内容的更多相关文章

  1. 第10.11节 Python模块和包小结

    Python的模块就是一个独立的Python文件,Python的包是一些功能相关的Python文件放到一个目录下进行统一管理的文件管理结构,包本质上是模块,加载包就是加载包下特定的模块文件__init ...

  2. 第10.8节 Python包的导入方式详解

    一. 包导入与模块导入的关系 由于包本质上是模块,其实对模块的许多导入方法都适用于包,但由于包的结构与模块有差异,所以二者还是有些区别的: 对包的导入,实际上就是包目录下的__init__.py文件的 ...

  3. 第10.7节 Python包和子包的定义步骤

    一. 包的定义步骤 按照包名创建或使用一个已有目录,目录名就是包名,必须注意包的目录必须位于Python加载模块的搜索路径中(具体请参考<第10.1节 Python的模块及模块导入>关于模 ...

  4. 第10.6节 Python包的概念

    一. 引言 在<第10.2节 Python的模块及模块导入>介绍了模块的概念及导入的几个关键点,Python中的模块是一个单个的py文件,当我们开发的项目或功能集由多个文件构成时,我们需要 ...

  5. 第10.9节 Python子包的导入方式介绍

    在<第10.8节 Python包的导入方式详解>详细介绍了包的导入方式,子包也是包,子包的导入与包的导入方法上没有本质区别,但二者还是有所不同.本节对照二者的方式介绍子包与包导入的关系: ...

  6. 转载:【学习之家】Python中__init__.py文件的作用

    Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...

  7. python中__init__.py文件的作用

    问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...

  8. Python的__init__.py用法

    python中包的引入,对于大型项目中都会使用到这个功能,把实现不同功能的python文件放在一起,组成不同lib库,然后在其他地方调用. 包,python源文件+__init__.py 模块,pyt ...

  9. Python中__init__.py文件的作用详解

    转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...

随机推荐

  1. 14、Cookie和Session组件

    cookie Cookie的由来 大家都知道HTTP协议是无状态的. 无状态的意思是每次请求都是独立的,它的执行情况和结果与前面的请求和之后的请求都无直接关系,它不会受前面的请求响应情况直接影响,也不 ...

  2. 记git一些基本用法

    git init        在合适的位置建一个文件夹,并在当前目录下右键打开    git Bash,利用git init把这个目录改成git可以管理的仓库 git add 要添加的文件名    ...

  3. Python正则表达式-换行的匹配

    找到了之前参考的博文,用来记录一下https://www.cnblogs.com/baxianhua/p/8572805.html 平常 点 (.)去匹配任意字符的时候,是不能匹配换行符的 匹配换行: ...

  4. python_udp_多人聊天室_简单版

    udp-一定是client端先发送数据. server.py import socket friend_lst = {'alex':'32','太白':'33'} sk =socket.socket( ...

  5. 【转】Lisp的本质

    Lisp的本质: http://www.csdn.net/article/2012-11-22/2812113-The-Nature-Of-Lisp###

  6. IDEA与Eclipse创建struts项目

    1.IDEA创建struts项目 这里再构建struts项目是选择jar包出问题了,可以重新配置 创建页面和action配置struts.xml 启动tomcat,浏览器中运行 具体参考: https ...

  7. python实现二叉树递归遍历与非递归遍历

    一.中序遍历 前中后序三种遍历方法对于左右结点的遍历顺序都是一样的(先左后右),唯一不同的就是根节点的出现位置.对于中序遍历来说,根结点的遍历位置在中间. 所以中序遍历的顺序:左中右 1.1 递归实现 ...

  8. POSIX信号量与互斥锁实现生产者消费者模型

    posix信号量 Link with -lpthread. sem_t *sem_open(const char *name, int oflag);//打开POSIX信号量 sem_t *sem_o ...

  9. Docker与Ceph的分与合

    前言 docker是一个管理工具,在操作系统之上提供了一个新的独立轻环境,好处是本地提供了一个基础镜像,然后基于镜像再运行环境,也可以把环境重新打包为镜像,管理起来类似于git,感觉非常的方便,并且能 ...

  10. Python _PyQt5对话框

    Python 调用PyQt5 制作对话框,退出时候有二次确认(注:默认是直接退出) 1 # -*- ytf-8 -*- 2 """ 3 用PyQt建一个对话框,退出时提示 ...