第10.10节 Python使用__init__.py自动加载包下内容
在前面章节老猿介绍了包下模块及子包的加载的各种方式,并说明包的加载首先是自动加载包下的__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自动加载包下内容的更多相关文章
- 第10.11节 Python模块和包小结
Python的模块就是一个独立的Python文件,Python的包是一些功能相关的Python文件放到一个目录下进行统一管理的文件管理结构,包本质上是模块,加载包就是加载包下特定的模块文件__init ...
- 第10.8节 Python包的导入方式详解
一. 包导入与模块导入的关系 由于包本质上是模块,其实对模块的许多导入方法都适用于包,但由于包的结构与模块有差异,所以二者还是有些区别的: 对包的导入,实际上就是包目录下的__init__.py文件的 ...
- 第10.7节 Python包和子包的定义步骤
一. 包的定义步骤 按照包名创建或使用一个已有目录,目录名就是包名,必须注意包的目录必须位于Python加载模块的搜索路径中(具体请参考<第10.1节 Python的模块及模块导入>关于模 ...
- 第10.6节 Python包的概念
一. 引言 在<第10.2节 Python的模块及模块导入>介绍了模块的概念及导入的几个关键点,Python中的模块是一个单个的py文件,当我们开发的项目或功能集由多个文件构成时,我们需要 ...
- 第10.9节 Python子包的导入方式介绍
在<第10.8节 Python包的导入方式详解>详细介绍了包的导入方式,子包也是包,子包的导入与包的导入方法上没有本质区别,但二者还是有所不同.本节对照二者的方式介绍子包与包导入的关系: ...
- 转载:【学习之家】Python中__init__.py文件的作用
Python中__init__.py文件的作用详解 Python中__init__.py文件的作用详解 来源:学习之家 作者:xuexi110 人气:357 发布时间:2016-09-29 摘要:__ ...
- python中__init__.py文件的作用
问题 在执行models.py时,报ImportError:No module named transwarp.db的错误,但明明transwarp下就有db.py文件,路径也没有错误.真是想不通.后 ...
- Python的__init__.py用法
python中包的引入,对于大型项目中都会使用到这个功能,把实现不同功能的python文件放在一起,组成不同lib库,然后在其他地方调用. 包,python源文件+__init__.py 模块,pyt ...
- Python中__init__.py文件的作用详解
转自http://www.jb51.net/article/92863.htm Python中__init__.py文件的作用详解 http://www.jb51.net/article/86580. ...
随机推荐
- SQL Server中约束的介绍
SQL Server中约束的介绍(转载收藏) Posted on 2010-09-03 11:05 grayboy 阅读(8501) 评论(0) 编辑 收藏 作者:GrayBoy 出处:http:// ...
- Desition Tree附代码
- 面经手册 · 第17篇《码农会锁,ReentrantLock之AQS原理分析和实践使用》
作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 如果你相信你做什么都能成,你会自信的多! 千万不要总自我否定,尤其是职场的打工人.如 ...
- LeetCode-680-验证回文字符串 Ⅱ
给定一个非空字符串 s,最多删除一个字符.判断是否能成为回文字符串. image.png 解题思路: 判断是否回文字符串:isPalindrome = lambda x: x==x[::-1],即将字 ...
- StringUtil字符串工具-功能扩展
对java的String类的一些小补充. public class StringUtil { /** 将一个字符串的首字母大写然后返回. @param str 要处理的目标字符串. @return S ...
- GMP-C/C++(大数库)使用方法
The GNU Multiple Precision Arithmetic Library(GNU 高精度算数库)是一个用于任意精度算术的免费库,可处理带符号整数,有理数和浮点数.除了运行GMP机器中 ...
- 使用配置文件方式记录Python程序日志
开发者可以通过三种方式配置日志记录: 调用配置方法的Python代码显式创建记录器.处理程序和格式化程序. 创建日志配置文件并使用fileConfig() 函数读取. 创建配置信息字典并将其传递给di ...
- Azure Data Factory(五)Blob Storage 密钥管理问题
一,引言 之前讲解的ADF 集成Azure DevOps 实现CI/CD,在 Releases Pipeline 阶段,我们是将两个 Blob Storage 的链接字符串复制.粘贴到 "O ...
- 手把手教你使用Vuex(四)
3.Action Action类似于mutation,不同之处在于: Action提交的是mutation,而不是直接变更状态 Action可以包含任何异步操作 可以理解为将mutations里面处理 ...
- Linux杂谈: 实现一种简单实用的线程池(C语言)
基本功能 1. 实现一个线程的队列,队列中的线程启动后不再释放: 2. 没有任务执行时,线程处于pending状态,等待唤醒,不占cpu: 3. 当有任务需要执行时,从线程队列中取出一个线程执行任务: ...