当执行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中执行shell的两种方法总结

    这篇文章主要介绍了python中执行shell的两种方法,有两种方法可以在Python中执行SHELL程序,方法一是使用Python的commands包,方法二则是使用subprocess包,这两个包 ...

  2. python中的pandas的两种基本使用

    python中的pandas的两种基本使用2018年05月19日 16:03:36 木子柒努力成长 阅读数:480 一.pandas简介 pandas:panel data analysis(面板数据 ...

  3. Java中匿名类的两种实现方式(转)

    使用匿名内部类课使代码更加简洁.紧凑,模块化程度更高.内部类能够访问外部内的一切成员变量和方法,包括私有的,而实现接口或继承类做不到.然而这个不是我说的重点,我说的很简单,就是匿名内部类的两种实现方式 ...

  4. Python中的单例模式的几种实现方式的优缺点及优化

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  5. 【转载】 Java中String类型的两种创建方式

    本文转载自 https://www.cnblogs.com/fguozhu/articles/2661055.html Java中String是一个特殊的包装类数据有两种创建形式: String s ...

  6. Python中的单例模式的几种实现方式的及优化

    单例模式 单例模式(Singleton Pattern)是一种常用的软件设计模式,该模式的主要目的是确保某一个类只有一个实例存在.当你希望在整个系统中,某个类只能出现一个实例时,单例对象就能派上用场. ...

  7. Python中utf-8与utf-8-sig两种编码格式的区别

    As UTF-8 is an 8-bit encoding no BOM is required and anyU+FEFF character in the decoded Unicode stri ...

  8. python中字符串格式化的两种方法

    知识点汇总;1-字符串格式化输出方法一: % 1-print('名字是 %s,年龄是%s' % (name ,age)) 2- %s ---字符串-----相当于执行了str() 3- (name , ...

  9. Python中的单例模式的几种实现方式和优化以及pyc文件解释(转)

    原文:https://www.cnblogs.com/huchong/p/8244279.html 另一篇关于.pyc文件是什么?  原文: http://blog.sina.com.cn//s/bl ...

随机推荐

  1. 【BZOJ1013】球形空间产生器sphere

    高斯消元模板题 #include <cstdio> #include <cstring> #include <algorithm> #include <ios ...

  2. 监控windows

    一.zabbix server和zabbix agent(windows)的地址说明 zabbix server的ip为:192.168.1.106 zabbix agent的ip为:192.168. ...

  3. SVO详细解读

    SVO详细解读 极品巧克力 前言 接上一篇文章<深度滤波器详细解读>. SVO(Semi-Direct Monocular Visual Odometry)是苏黎世大学Scaramuzza ...

  4. networkX用法整

    无向图,有向图,加权图等例子代码 [http://www.cnblogs.com/kaituorensheng/p/5423131.html#_label1] 数据分析学习笔记(三)-NetworkX ...

  5. 编写高质量代码改善C#程序的157个建议——建议123:程序集不必与命名空间同名

    建议123:程序集不必与命名空间同名 程序集一般会和命名空间同名,但这并不是必须的.事实上,不同名的命名空间和程序集是很常见的. 程序集表示的是一种物理上的分组,而命名空间是逻辑上的分组,两者没有必然 ...

  6. Android colorAccent、colorPrimary、colorPrimaryDark actionbar toolbar navigationbar

    伴随着Android5.0的发布也更新了support-v7-appcompat 到V21,其中增加了ToolBar.recyclerview.cardview等控件. Android5.0对改变AP ...

  7. Linux Crontab 任务管理工具命令以及示例

    Crontab 是 Linux 平台下的一款用于循环执行例行任务的工具,Linux 系统由 cron (crond) 这个系统服务来控制任务 , Linux系统本来就有很多的计划任务需要启动 , 所以 ...

  8. MySQL的下载和安装

    MySQL的下载 MySQL官网:https://www.mysql.com/ MySQL的安装 https://jingyan.baidu.com/article/6181c3e0d27a57152 ...

  9. Domino 迁移到Exchange 之 Domino Admin 安装!

    双击Setup 安装:

  10. Nhibernate 存储过程获取返回值

    写在前面:因为项目使用ssh.net所以做着做着要调用存储过程,而且是有返回值的,按照以前的做法直接在参数里指定下就可以获取,但是在nhibernate里调用就有点陌生了,百度一下得出的结果有两种:第 ...