当执行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机制的两种实现方式(转载)相关推荐

  1. Python中复制文件的两种简单方式

    用Python拷贝文件的方式其实有很多,但个人觉得最简单.最直接的可能是这么两种: 方法一:借助操作系统中本身的拷贝命令 >>> import os >>> os. ...

  2. Python 中的字符串有两种索引方式,从左往右以 0 开始,从右往左以 -1 开始。

    Python中字符串的索引方式,偏移量为1,即第1个字符的索引为0,而从右向左第一个为-1. 字符串截取的语法格式为:变量名[头下标:尾下标:步长] 例如:输出字符串中第一个到倒数第二个字符 word ...

  3. python定义字符串变量有两种常用方式_Python 1基础语法二(标识符、关键字、变量和字符串)...

    一.标识符 标识符就是程序员自己命名的变量名.名字需要有见名知义的效果,不要随意起名 :比如 a=1 a是个变量,a这个变量名属于标识符 1 company = '小米 2 employeeNum = ...

  4. python自带的shell是什么-python中执行shell的两种方法总结

    一.使用python内置commands模块执行shell commands对Python的os.popen()进行了封装,使用SHELL命令字符串作为其参数,返回命令的结果数据以及命令执行的状态: ...

  5. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  6. python中的or的两种用法

    python中的or的两种用法 python中or除了常见的和and作为判断的条件外,还有一种不多见但很实用的用法,那就是: a = b or c 在这条赋值语句中的 or 的含义是判断 b 和 c ...

  7. java map遍历_Java中Map集合的两种遍历方式

    Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...

  8. java中两种遍历集合的方式_Java中Map集合的两种遍历方式

    Java中的map遍历有多种方法,从最早的Iterator,到java5支持的foreach,再到java8 Lambda,让我们一起来看下Java中Map集合的两种遍历方式! 关于遍历Map集合的几 ...

  9. 1.JavaScript中定义数组的两种主要方式

    JavaScript中定义数组的两种主要方式(new Array()和[]方式) new Array() ①可以用像JAVA的那种写法的方式定义,如 var arr = new Array() 这样定 ...

最新文章

  1. Windows保护模式学习笔记(十二)—— 控制寄存器
  2. 知名论坛猴岛游戏论坛宣布永久关闭!
  3. 《深入理解Java函数式编程》系列文章
  4. jquery datatable搜索框添加按钮,改变keypress搜索为点击按钮搜索
  5. OSX上Docker快速上手-以部署node.js环境为例
  6. 新版ubuntu中打开终端的方法和安装ssh 的方法
  7. php中::双冒号有什么作用
  8. RunLoop运行循环机制
  9. 校园导航系统(查询各景点信息,多个建筑点的最佳访问路径、任意点的建筑查询) 超详细!! 博主可答疑,代码免费给
  10. matlab x轴特殊符号,matlab中的特殊符号
  11. 计算机英语听力,每日英语听力pc版
  12. win10以太网没有有效的ip配置
  13. ionic 构建 Cannot load gulp tasks: Error: Error in module: .\gulpfile.js:
  14. numpy 数组的旋转、上下翻转、镜像
  15. [笨叔点滴6] 叔,这个git咋玩啊?
  16. 用html写树干的形状,HTML5使用纯CSS3构建的树枝和树叶
  17. SQL注入-01-什么是SQL注入?
  18. 如何用纯前端去写购物车_索尼商城购物车
  19. php 获取qq头像,php只需要一个QQ号就可以获得用户信息(昵称、头像)
  20. parseInt()和parseFloat()的解析原理

热门文章

  1. 跨平台PHP调试器设计及使用方法——使用
  2. 使用VC内嵌Python实现的一个代码检测工具
  3. C++中struct的使用
  4. 【Qt】QAudioDeviceInfo获取不到音频设备
  5. 行上下移动_这有一台你迟早要用到的“移动空调”
  6. 宁波大学计算机专业复试,2016年宁波大学信息科学与工程学院计算机专业考研复试题库. (1)...
  7. Element el-switch 组件样式修改 将文字显示到组件内
  8. nodejs回调函数理解
  9. JavaScript_下_Dom
  10. huffman树和huffman编码