在前面章节老猿介绍了包下模块及子包的加载的各种方式,并说明包的加载首先是自动加载包下的__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. OJ-1:时钟问题【九度1553】

    题目描述: 如图,给定任意时刻,求时针和分针的夹角(劣弧所对应的角). 输入: 输入包含多组测试数据,每组测试数据由一个按hh:mm表示的时刻组成. 输出: 对于每组测试数据,输出一个浮点数,代表时针 ...

  2. c#中简单工厂模式

    运算类 public class yunsuan { public static operation create(string operate) { operation oper = null; s ...

  3. 转载:WIFI无线协议802.11a/b/g/n/ac的演变以及区别

    WIFI无线协议802.11a/b/g/n/ac的演变以及区别 版权声明:版权所有,转载须注明出处. https://blog.csdn.net/Brouce__Lee/article/details ...

  4. 重看 mb volatile atomic

    在单处理器情况下,每条指令的执行都是原子性的,但在多处理器情况下,只有那些单独的读操作或写操作才是原子性的.为了弥补这一缺点,x86提供了附加的lock前缀,使带lock前缀的读修改写指令也能原子性执 ...

  5. Spring源码之@Lazy和预实例化

    https://www.cnblogs.com/yanze/p/10243348.html 懒加载优缺点 优点:懒加载,对象使用的时候才去创建:启动速度快,节省资源 缺点:不利于提前发现错误:初次请求 ...

  6. Python_Tips

    Python绝对路径与相对路径读写文件[上级目录: os.path.dirname(os.getcwd())] # coding:utf8 ''' 知识点:Python读写文件时候的相对路径与绝对路径 ...

  7. tomcat安装证书https

    操作步骤(阿里云官网) 解压已下载保存到本地的Tomcat证书文件. 解压后您将看到文件夹中有2个文件,您可为两个证书文件重命名. 证书文件(domain name.pfx):以.pfx为后缀或文件类 ...

  8. 写的太细了!Spring MVC拦截器的应用,建议收藏再看!

    Spring MVC拦截器 拦截器是Spring MVC中强大的控件,它可以在进入处理器之前做一些操作,或者在处理器完成后进行操作,甚至是在渲染视图后进行操作. 拦截器概述 对于任何优秀的MVC框架, ...

  9. CDR简单制作透明字体【6·18特惠倒计时3天!】

    将图片剪贴到文字中是平面设计常用的一种处理方法之一,一般是将图片置入到该文字,且图片的外轮廓是沿着文字的形状剪贴的,这种处理手法被广泛应用于排版设计中.本教程结合蒙版功能加阴影效果做出特殊的视觉效果. ...

  10. window consul安装和运行

    consul 前言 一.consul是什么? 二.使用步骤 1.安装 2.启动 结束~~ 前言 刚开始接触spring cloud,其中就有用到consul,简单介绍一下以及怎么安装运行起来 提示:以 ...