《Python包》一节中已经提到,包其实就是文件夹,更确切的说,是一个包含“__init__.py”文件的文件夹。因此,如果我们想手动创建一个包,只需进行以下 2 步操作:
例如,现在我们创建一个非常简单的包,该包的名称为 my_package,可以仿照以上 2 步进行:
由此,我们就成功创建好了一个 Python 包。 创建好包之后,我们就可以向包中添加模块(也可以添加包)。这里给 my_package 包添加 2 个模块,分别是 module1.py、module2.py,各自包含的代码分别如下所示(读者可直接复制下来): #module1.py模块文件def display(arc):print(arc)#module2.py 模块文件class CLanguage:def display(self):print("http://c./python/") my_package Python包的导入通过前面的学习我们知道,包其实本质上还是模块,因此导入模块的语法同样也适用于导入包。无论导入我们自定义的包,还是导入从他处下载的第三方包,导入方法可归结为以下 3 种:
1) import 包名[.模块名 [as 别名]]以前面创建好的 my_package 包为例,导入 module1 模块并使用该模块中成员可以使用如下代码:import my_package.module1my_package.module1.display("http://c./java/") http://c./java/ 可以看到,通过此语法格式导入包中的指定模块后,在使用该模块中的成员(变量、函数、类)时,需添加“包名.模块名”为前缀。当然,如果使用 as 给包名.模块名”起一个别名的话,就使用直接使用这个别名作为前缀使用该模块中的方法了,例如:import my_package.module1 as modulemodule.display("http://c./python/") http://c./python/ 另外,当直接导入指定包时,程序会自动执行该包所对应文件夹下的 __init__.py 文件中的代码。例如: import my_packagemy_package.module1.display("http://c./linux_tutorial/") http://c./python/ 我们知道,包的本质就是模块,导入模块时,当前程序中会包含一个和模块名同名且类型为 module 的变量,导入包也是如此: import my_packageprint(my_package)print(my_package.__doc__)print(type(my_package)) http://c./python/ 2) from 包名 import 模块名 [as 别名]仍以导入 my_package 包中的 module1 模块为例,使用此语法格式的实现代码如下:from my_package import module1module1.display("http://c./golang/") http://c./python/ 当然,我们也可以使用 as 为导入的指定模块定义别名,例如: from my_package import module1 as modulemodule.display("http://c./golang/") 同样,既然包也是模块,那么这种语法格式自然也支持 from 包名 import * 这种写法,它和 import 包名 的作用一样,都只是将该包的 __init__.py 文件导入并执行。3) from 包名.模块名 import 成员名 [as 别名]此语法格式用于向程序中导入“包.模块”中的指定成员(变量、函数或类)。通过该方式导入的变量(函数、类),在使用时可以直接使用变量名(函数名、类名)调用,例如:from my_package.module1 import displaydisplay("http://c./shell/") http://c./python/ 当然,也可以使用 as 为导入的成员起一个别名,例如: from my_package.module1 import display as disdis("http://c./shell/") 另外,在使用此种语法格式加载指定包的指定模块时,可以使用 * 代替成员名,表示加载该模块下的所有成员。例如: from my_package.module1 import *display("http://c./python") |
|