`

Python类、模块、包

 
阅读更多

Python在处理功能复用和功能颗粒度划分时采用了类、模块、包的结构。这种处理跟C++中的类和名字空间类似,但更接近于Java所采用的概念。

类的概念在许多语言中出现,很容易理解。它将数据和操作进行封装,以便将来的复用。

模块

模块,在Python可理解为对应于一个文件。在创建了一个脚本文件后,定义了某些函数和变量。你在其他需要这些功能的文件中,导入这模块,就可重用这些函数和变量。一般用module_name.fun_name,和module_name.var_name进行使用。这样的语义用法使模块看起来很像类或者名字空间,可将module_name 理解为名字限定符。模块名就是文件名去掉.py后缀。下面演示了一个简单的例子:

#moduel1.py
def say(word):
    print word

#caller.py
import module1

print __name__
print module1.__name__
module1.say('hello')
$ python caller.py
__main__
module1
hello

例子中演示了从文件中调用模块的方法。这里还展示了一个有趣的模块属性__name__,它的值由Python解释器设定。如果脚本文件是作为主程序调用,其值就设为__main__,如果是作为模块被其他文件导入,它的值就是其文件名。这个属性非常有用,常可用来进行模块内置测试使用,你会经常在一些地方看到类似于下面的写法,这些语句只在作为主程序调用时才被执行。

if __name__ == '__main__':
    app = wxapp(0)
    app.MainLoop()

模块搜索路径

上面的例子中,当module1被导入后,python解释器就在当前目录下寻找module1.py的文件,然后再从环境变量PYTHONPATH寻找,如果这环境变量没有设定,也不要紧,解释器还会在安装预先设定的的一些目录寻找。这就是在导入下面这些标准模块,一切美好事情能发生的原因。

import os
import sys
import threading
...

这些搜索目录可在运行时动态改变,比如将module1.py不放在当前目录,而放在一个冷僻的角落里。这里你就需要通过某种途径,如sys.path,来告知Python了。sys.path返回的是模块搜索列表,通过前后的输出对比和代码,应能理悟到如何增加新路径的方法了吧。非常简单,就是使用list的append()或insert()增加新的目录。

#module2.py
import sys
import os

print sys.path
workpath = os.path.dirname(os.path.abspath(sys.argv[0]))
sys.path.insert(0, os.path.join(workpath, 'modules'))
print sys.path
$ python module2.py
['e:\\Project\\Python', 'C:\\WINDOWS\\system32\\python25.zip', ...]
['e:\\Project\\Python\\modules', 'e:\\Project\\Python', 'C:\\WINDOWS\\system32\\python25.zip', ...]

其他的要点

模块能像包含函数定义一样,可包含一些可执行语句。这些可执行语句通常用来进行模块的初始化工作。这些语句只在模块第一次被导入时被执行。这非常重要,有些人以为这些语句会多次导入多次执行,其实不然。

模块在被导入执行时,python解释器为加快程序的启动速度,会在与模块文件同一目录下生成.pyc文件。我们知道python是解释性的脚本语言,而.pyc是经过编译后的字节码,这一工作会自动完成,而无需程序员手动执行。

在创建许许多多模块后,我们可能希望将某些功能相近的文件组织在同一文件夹下,这里就需要运用包的概念了。包对应于文件夹,使用包的方式跟模块也类似,唯一需要注意的是,当文件夹当作包使用时,文件夹需要包含__init__.py文件,主要是为了避免将文件夹名当作普通的字符串。__init__.py的内容可以为空,一般用来进行包的某些初始化工作或者设置__all__值,__all__是在from package-name import *这语句使用的,全部导出定义过的模块。

分享到:
评论

相关推荐

    NS3打包成python2模块

    描述中提到的“编译成python2模块的包”,意味着开发者需要先将NS3的源代码编译,生成适配Python2的动态链接库或者Python模块。这通常涉及到以下步骤: 1. **安装NS3**: 首先需要下载并安装NS3的源代码,根据官方...

    python常用模块打包.zip

    1.beautifulsoup4-4.5.1.tar 2.beautifulsoup4-4.5.1.tar 3.chardet-3.0.4-py2.py3-none-any 4.cssselect-1.1.0-py2.py3-none-any 5.idna-2.8-py2.py3-none-any 6.lxml-4.5.2-cp36-cp36m-win_amd64 ...

    Python模块包管理工具

    ### Python模块包管理工具 在Python开发过程中,模块与包的管理是不可或缺的一部分。通过合理的模块组织和包管理,不仅可以提高代码的可读性和可维护性,还能方便地利用社区共享的各种工具和库来增强程序的功能。...

    易语言Python3.7模块.rar

    "text.py"和"python_e.pyd"是两个示例文件,"text.py"是Python源代码文件,展示了如何在Python中编写基本的文本处理程序,而"python_e.pyd"可能是经过编译后的Python模块,用于易语言环境中运行。 "说明.txt"文件则...

    python串口通信模块包--pyserial-3.4.tar.gz

    3.4.tar.gz步骤:下载pyserial-3.4.tar.gz并解压,在安装python并将python添加到环境变量中后,打开命令提示符窗口切换到解压pyserial-3.4.tar.gz的目录路径,然后输入python setup.py install,即可安装serial包。...

    python3 标准模块实例学习 原版

    本篇文章将深入探讨Python3标准模块的实例学习,帮助你更好地系统地学习和熟练掌握这些模块。 首先,我们来看一下“标准模块”的概念。标准模块是Python解释器自带的一系列模块,无需额外安装即可直接使用。它们...

    python扩展包

    以下是压缩包内的pdb文件及其对应的Python模块: 1. `_ssl.pdb` - 这个文件与Python的SSL模块有关,提供安全套接层(SSL)和传输层安全(TLS)的支持,用于加密网络通信。 2. `python27.pdb` - 可能是针对Python 2.7...

    python2.7.10几个常用模块

    - **setuptools**: 扩展了distutils,增加了更多的功能,如处理依赖关系、自动发现Python模块等,使得包管理更加方便。 - **pip**: Python的包管理工具,用于安装和管理Python软件包,可以通过它安装压缩包中的...

    python3依赖包.zip

    Python3 的依赖包种类繁多,包括但不限于以下几类: 1. **科学计算与数据分析**:如NumPy、SciPy和Pandas,用于高性能数值计算和数据分析;Matplotlib则提供了数据可视化功能。 2. **Web框架**:Django和Flask是两...

    python模块安装工具

    Python模块是一组相关的函数和类的集合,封装在一个单独的文件中,通常以`.py`为扩展名。为了在项目中使用这些模块,我们需要将它们导入到我们的代码中。然而,有些模块并不包含在Python的标准库中,因此需要通过...

    python各模块思维导图

    在Python中,模块是代码组织的基本单元,可以包含变量、函数、类等元素。理解这些模块对于深入学习Python至关重要。以下是一些关键模块的介绍: 1. **内置模块**:Python在标准库中提供了一组内置模块,如`sys`用于...

    python 包、模块、函数与变量作用域视频讲解

    接下来是“包”(Package),它是管理Python模块命名空间的一种方式。一个包是一个含有__init__.py文件的文件夹,这个文件可以是空的,也可以包含初始化代码。包的作用是避免命名冲突,提供更好的代码组织结构。包内...

    python 的模块与包程序

    python 的模块与包程序

    python汉化包

    这里的"lib"目录通常是Python安装中包含各种库和模块的地方,因此将汉化包放在这里是为了让它能够影响到Python的运行时环境。 为了正确应用这个汉化包,用户需要确保他们的Python环境是3.7版本,并且已经正确安装。...

    python模块源码

    阅读Python模块源码时,首先要理解模块的结构,找到主函数和关键类。其次,关注模块中的异常处理和错误报告,了解其异常策略。最后,查看模块的测试代码(如果有的话),测试代码通常能展示模块的使用方式和预期行为...

    用C语音编写python的扩展模块,也就是python调c库

    6. **测试调用**:在Python中,你可以像导入普通Python模块一样导入这个C扩展模块,然后调用其中的函数。 通过这种方式,C语言编写的库可以无缝集成到Python环境中,充分利用C的性能优势,同时保持Python的易用性和...

    python2.7依赖包.zip

    在这个"python2.7依赖包.zip"中,包含了一系列在CentOS 7上运行Python 2.7所需的库和模块。CentOS 7是一个基于Linux的服务器操作系统,因其稳定性而被广泛用于企业环境。 首先,让我们了解Python依赖包的重要性。在...

    python资料模块二

    Python是一种广泛使用...综上所述,“python资料模块二”应该涵盖了Python模块化的核心概念,包括模块的导入、别名、模块搜索路径、包和`__main__.py`文件的使用。深入理解这些内容,将有助于提升你的Python编程技能。

    How to 安装python包和模块.docx

    模块是Python代码的组织单元,通常是一个`.py`文件,包含了函数、类和变量等定义。而包则是一个含有`__init__.py`文件的目录,它将多个模块组织在一起,形成一个命名空间,方便管理和复用。 ### 方法一:直接拷贝...

    知识笔记:Python模块与包(八)

    内容概要:本文档全面讲解了Python中的模块与包概念,具体涵盖了模块的定义与导入语法细节,介绍了模块的多样化导入方式,讨论了自定义模块的步骤及其应用,强调了在实际操作过程中常见问题及解决方案,还探讨了包的...

Global site tag (gtag.js) - Google Analytics