Python 基础知识教程-模块(Modules)和类

18年9月17日 · 王月成 3790 人阅读
现在你已经学习了类,你的程序会变得越来越长,能够做的事也越来越多。但是也会出现一些弊端,因为越长的程序越变得难以阅读和维护。不用担心, Python 允许你将类放进另一个文件中然后在你的程序中导入。这样就将你的类和程序隔离,也就能在不同的程序中运用。随着使用次数的增多,类也会变得越来越可靠和完善。
在模块中存储一个类
当你将类存储在一个单独的文件中时,这个文件就被称为一个模块(module)。在一个模块中可以写入任意数量的类。而且有很多方式在程序中导入模块中的类。
接着所学类的知识,我们将 Rocket 类存进一个称之为 rocket.py 的文件。需要注意的是,模块的名字是小写的单词,类名是以大写字母开头的。
这种约定俗称的命名方式是相当重要的,谨记。示例如下:
创建一个单独的 rocket_name.py 文件。确保使用约定的命名方式,小写字母加下划线的方式为文件命名。示例如下:
这个程序是相当简洁和可读的。你不必关心 Rocket 类的内部实现,拿来就用。第一行告诉 Python 寻找一个名为 rocket.py 的文件。它就会在当前程序的当前目录下查找。你也可以把模块文件放到其他文件夹下,稍后我们会讲如何找到模块文件。
当 Python 发现了文件 rocket.py 。它找到一个名为 Rocket 的类,导入当前程序中,然后就可以使用了。
在模块中存储多个类
一个模块通常是包含多个类和函数的文件。因此 Shuttle 类也是术语 rocket 模块的。示例如下:
现在你可以在程序中导入 Rocket 和 Shuttle 类。示例如下:
第一行告诉 Python 从 rocket 模块中导入 Rocket 和 Shuttle 类。你只需要导入你需要的类即可,Python 也只会花时间处理这些被选中的类。
导入模块和类的一些方法
有许多导入模块和类的方法,每一种方法也各有优缺点。
import module_name
刚刚的示例所有的导入语法如下所示:
这种方法是相当直接且常用的。但是有一个问题,当程序逐渐变大时,程序中可能会出现和导入的类名相同的名字。在这种情况下,你可以只导入模块,如下所示:
通常的语法如下:
导入之后就可以利用点来引用模块中的类了。如下所示:
这种导入方式避免了刚才的问题。但是仔细阅读代码你会发现另一个问题,程序中使用 rocket 名字的变量都要改变,因为它跟模块名冲突了。如果程序很大,更改名字也是很大的工作量。
import module_name as local_module_name
另外一种有效的导入方式如下所示:
当你在你的项目中导入模块时,你可以为模块自定义名字。因此上述代码可以更改为如下形式:
from module_name import *
还有另外一种导入的方法。这种方法导入模块中的所有类和函数。如下所示:
这种方法虽然可行,但你要尽量避免使用。首先你不知道导入的类名是不是和程序中其他变量名等冲突;而且你将会在程序中导入大量的代码,影响代码性能。
如果你真的需要引用模块中的所有函数和类,可以采用导入模块名字的方式,然后用 module_name.ClassName 这种方式引用类或者函数。
函数模块
模块中也可以存储函数,使用方法和上述类的使用相同。下面是一个简单的例子:
现在你可以导入 multiplying.py 文件到程序并使用其中的函数。几种导入方法如下所示:
Python3Turtle