Python模块与包入门:import机制、目录结构与__init__.py作用
本文介绍Python中模块和包的基本概念。模块对应库文件,可通过import或__import__导入;调用需使用模块名.成员名。包用于组织模块,目录必须包含__init__.py文件。文章详细讲解了绝对路径调用、from...import语句及__all__控制通配符导入的方法。
Python语言具备强大的功能体系,除了面向对象编程中的类概念外,还引入了模块和包的概念。这一设计思路与Perl语言有相似之处,本节将简要阐述包和模块的相关机制。
一、Python中的模块
模块的概念等同于通常所说的库(lib)。它不仅能够包含一系列函数,还可以包含类。与C语言等语言直接包含文件不同,Python通过“包”的形式来实现类似的文件引入功能。
在Python中,引入模块主要有两种方法:
1、使用 import 模块名(这里的模块名实际上对应的是文件名.py)
2、使用 模块名 = __import__("模块文件名(不带扩展名)")
此外,还可以使用 " import 模块名 as 别名 " 的方式来进行调用。
例如:
# -*- coding: gb18030 -*-
#引入模块
import test_mod
#调用模块里的函数 test_mod.my_func()
#调用模块里的类 tc = test_mod.test_cls() tc.test_func()
test_mod.py源码如下: # -*- coding: gb18030 -*-
def my_func(): print 'I am a function in the module! '
class test_cls: def test_func(self): print 'I am a mothod in the class! '
在调用模块中的函数或类时,必须采用“模块名.类名|函数名”的形式。
正是由于这种特性,Python中出现了许多如 os.xx 、 sys.xx 之类的语法结构。需要注意的是,这些调用结果不一定是对象(对象与非对象之间的界限有时显得较为模糊,或者可以认为模块本身也是一种特殊的对象)。这被视为Python语言的一个显著缺点,但一旦习惯这种风格,阅读Python脚本将会变得更加容易。
sys 和 os 是Python中最常用的模块,建议用户对此有所了解。 二、Python中的包
包本质上是对一系列模块的封装,旨在防止模块名称之间发生冲突。对于一个标准的Python程序,其通常的结构为:
appname
__init__.py
son_pack1
__init__.py
son_mod_1_1.py
son_mod_1_2.py
son_pack2
__init__.py
son_mod_2_1.py
son_mod_2_2.py
son_mod_1.py
.......
如果熟悉Java语言,会发现这是一种按目录查找文件的方法。其不同之处在于,每个目录必须包含 __init__.py 文件,否则该目录不会被识别为包的子目录。
在 __init__.py 文件中,可以定义 __version__、__all__、__path__ 三个特殊变量,这些变量可以指定具体值,也可以保持为空。
调用包中类或函数的方法如下:
包名.子包名.类名|函数名
这种机制实际上类似于C++或C#中的名字空间(Namespace)。
在调用包时,需要明确目录注册以及具体模块的调用方式。
例如,若要调用 son_mod_1_1.py 文件,
那么调用路径为:
此外,还有一种方法是使用 form 关键字(注:原文为form,通常应为from),具体方法为:
如果要一次性引入 appname.son_pack1 里的所有模块,可以使用以下语句:
对于使用 import * 的情况,必须在 __init__.py 文件中通过 __all__ 明确指定要导出的模块,例如:
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













