python中package机制的两种实现方式(转载)
当执行import module时,解释器会根据下面的搜索路径,搜索module1.py文件。
1) 当前工作目录
2) PYTHONPATH中的目录
3) Python安装目录 (/usr/local/lib/python)
事实上,模块搜索是在保存在sys.path这个全局变量中的目录列表中进行搜索。
sys.path会在解释器开始执行时被初始化成包含:
1)当前工作目录
2) PYTHONPATH中的目录
3) Python安装目录 (/usr/local/lib/python)
package是模块的集合,每一个Package的根目录下面都应当有一个__init__.py 文件。当解释器发现目录下有这个文件时,他就会认为这是一个Package,而不是一个普通的目录。
我们通过下面这样的一个实例来说明
假定项目结构如下:
demo.py
MyPackage
---classOne.py
---classTwo.py
---__init__.py
现在我们通过两种方式来实现包机制,主要区别就在于是否在__init__.py中写入模块导入语句。
1,__init__.py是一个空白文件的方式,
demo.py内容如下:
from MyPackage.classOne import classOne
from MyPackage.classTwo import classTwo
if __name__ == "__main__":
c1 = classOne()
c1.printInfo()
c2 = classTwo()
c2.printInfo()
classOne.py内容如下:
class classOne:
def __init__(self):
self.name = "class one"
def printInfo(self):
print("i am class One!")
classTwo.py内容如下:
class classTwo:
def __init__(self):
self.name = "class two"
def printInfo(self):
print("i am class two!")
2,如果在__init__.py中写入导入模块的语句,则上述例子可以这样来做。
其中__init__.py中内容如下:
from classOne import classOne
from classTwo import classTwo
demo.py内容如下:
import MyPackage
if __name__ == "__main__":
c1 = MyPackage.classOne()
c1.printInfo()
c2 = MyPackage.classTwo()
c2.printInfo()
或者demo.py也可以定义如下:
from MyPackage import *
if __name__ == "__main__":
c1 = classOne()
c1.printInfo()
c2 = classTwo()
c2.printInfo()
python中package机制的两种实现方式(转载)相关推荐
- Python中复制文件的两种简单方式
用Python拷贝文件的方式其实有很多,但个人觉得最简单.最直接的可能是这么两种: 方法一:借助操作系统中本身的拷贝命令 >>> import os >>> os. ...
- Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。
Python中字符串的索引方式,偏移量为1,即第1个字符的索引为0,而从右向左第一个为-1. 字符串截取的语法格式为:变量名[头下标:尾下标:步长] 例如:输出字符串中第一个到倒数第二个字符 word ...
- python定义字符串变量有两种常用方式_Python 1基础语法二(标识符、关键字、变量和字符串)...
一.标识符 标识符就是程序员自己命名的变量名.名字需要有见名知义的效果,不要随意起名 :比如 a=1 a是个变量,a这个变量名属于标识符 1 company = '小米 2 employeeNum = ...
- python自带的shell是什么-python中执行shell的两种方法总结
一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: ...
- 站长在线Python精讲:在Python中格式化字符串的两种方法详解
欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...
- python中的or的两种用法
python中的or的两种用法 python中or除了常见的和and作为判断的条件外,还有一种不多见但很实用的用法,那就是: a = b or c 在这条赋值语句中的 or 的含义是判断 b 和 c ...
- java map遍历_Java中Map集合的两种遍历方式
Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...
- java中两种遍历集合的方式_Java中Map集合的两种遍历方式
Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...
- 1.JavaScript中定义数组的两种主要方式
JavaScript中定义数组的两种主要方式(new Array()和[]方式) new Array() ①可以用像JAVA的那种写法的方式定义,如 var arr = new Array() 这样定 ...
最新文章
- Windows保护模式学习笔记(十二)—— 控制寄存器
- 知名论坛猴岛游戏论坛宣布永久关闭!
- 《深入理解Java函数式编程》系列文章
- jquery datatable搜索框添加按钮,改变keypress搜索为点击按钮搜索
- OSX上Docker快速上手-以部署node.js环境为例
- 新版ubuntu中打开终端的方法和安装ssh 的方法
- php中::双冒号有什么作用
- RunLoop运行循环机制
- 校园导航系统(查询各景点信息,多个建筑点的最佳访问路径、任意点的建筑查询) 超详细!! 博主可答疑,代码免费给
- matlab x轴特殊符号,matlab中的特殊符号
- 计算机英语听力,每日英语听力pc版
- win10以太网没有有效的ip配置
- ionic 构建 Cannot load gulp tasks: Error: Error in module: .\gulpfile.js:
- numpy 数组的旋转、上下翻转、镜像
- [笨叔点滴6] 叔,这个git咋玩啊?
- 用html写树干的形状,HTML5使用纯CSS3构建的树枝和树叶
- SQL注入-01-什么是SQL注入?
- 如何用纯前端去写购物车_索尼商城购物车
- php 获取qq头像,php只需要一个QQ号就可以获得用户信息(昵称、头像)
- parseInt()和parseFloat()的解析原理
热门文章
- 跨平台PHP调试器设计及使用方法——使用
- 使用VC内嵌Python实现的一个代码检测工具
- C++中struct的使用
- 【Qt】QAudioDeviceInfo获取不到音频设备
- 行上下移动_这有一台你迟早要用到的“移动空调”
- 宁波大学计算机专业复试,2016年宁波大学信息科学与工程学院计算机专业考研复试题库. (1)...
- Element el-switch 组件样式修改 将文字显示到组件内
- nodejs回调函数理解
- JavaScript_下_Dom
- huffman树和huffman编码