1.6.2 包及其定义

为了方便管理,通常将程序文件(模块)以特定目录的形式进行打包。作为包的目录中必须至少包含一个名为__init__.py的文件,也可以包含一些模块文件和作为子包的子目录。作为子包的子目录中同样至少包含一个名为__init__.py的文件。文件__init__.py的内容可以为空。

__init__.py文件的主要作用为:

(1)作为python中包与普通目录的区别标识。

(2)编写代码,定义类、函数、变量等对象。

(3)定义__all__变量来确定采用from moduleName import∗时导入的模块名称。

如果在d盘根目录下建立了pythonpackagetest目录,在该目录下创建了一个__init__.py文件。在该文件中定义了变量PI=3.14159。这时,可以通过以下方式来调用这个PI变量值。

也可以用此方法来引用自定义包下__init__.py文件中定义的其他对象。如果再在此文件中定义XX=5、YY=10两个变量和printTest1()、printTest2()两个函数。此时__init__.py文件的内容为:

此时通过from pythonpackagetest import∗方式导入后,可以引用PI、XX、YY 3个全部变量的值及全部函数。

从刚才的例子可以看到,通过from模块名import∗这种方式可以导入模块中的所有对象。现在,再在此__init__.py文件中定义变量__all__=['PI','YY','printTest2']。pythonpackagetest目录下__init__.py文件的内容为:

变量__all__定义了通过from模块名import∗所能够导入的对象内容。不在变量__all__列表中的对象不能通过此方式导入,例子如下:

再在pythonpackagetest包目录下创建hello.py和helloworld.py两个文件,也就是两个模块。文件hello.py中定义了函数printHello(),其内容为:

文件helloworld.py中定义了printHelloWorld()函数,其内容为:

可以通过如下方式引用这两个模块中的函数: