Python模块与包入门:import机制、目录结构与__init__.py作用

不晚
不晚
发布时间:2026-10-12 | 2人浏览过
原创

本文介绍Python中模块和包的基本概念。模块对应库文件,可通过import或__import__导入;调用需使用模块名.成员名。包用于组织模块,目录必须包含__init__.py文件。文章详细讲解了绝对路径调用、from...import语句及__all__控制通配符导入的方法。

Python语言具备强大的功能体系,除了面向对象编程中的类概念外,还引入了模块和包的概念。这一设计思路与Perl语言有相似之处,本节将简要阐述包和模块的相关机制。

一、Python中的模块

模块的概念等同于通常所说的库(lib)。它不仅能够包含一系列函数,还可以包含类。与C语言等语言直接包含文件不同,Python通过“包”的形式来实现类似的文件引入功能。

在Python中,引入模块主要有两种方法:

1、使用 import 模块名(这里的模块名实际上对应的是文件名.py)

2、使用 模块名 = __import__("模块文件名(不带扩展名)")

此外,还可以使用 " import 模块名 as 别名 " 的方式来进行调用。

例如:

复制代码 代码如下:
test.py
# -*- 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程序,其通常的结构为:

复制代码 代码如下:
app.py
    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 文件,

那么调用路径为:

复制代码 代码如下:
appname.son_pack1.son_mod_1_1

此外,还有一种方法是使用 form 关键字(注:原文为form,通常应为from),具体方法为:

复制代码 代码如下:
from appname.son_pack1 import son_mod_1_1

如果要一次性引入 appname.son_pack1 里的所有模块,可以使用以下语句:

复制代码 代码如下:
from appname.son_pack1 import *

对于使用 import * 的情况,必须在 __init__.py 文件中通过 __all__ 明确指定要导出的模块,例如:

复制代码 代码如下:
__all__ = ["son_mod_1_1", "son_mod_1_2"]

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表