第 26 章 OOP:全貌
本作品已使用人工智能进行翻译。欢迎您提供反馈和意见:translation-feedback@oreilly.com
在本书中,我们一直泛泛地使用 "对象 "一词,实际上,到目前为止编写的代码都是基于对象的,我们在脚本中传递对象,在表达式中使用对象,调用对象的方法,等等。不过,要使我们的代码成为真正的面向对象(OO)代码,我们的对象通常还需要参与一种称为继承层次结构的东西。
本章开始我们对 Python类的探索--类是一种编码结构和设备,用于在 Python 中实现支持继承的新型对象。类是 Python 的主要面向对象编程 (OOP) 工具,因此在本书的这一部分,我们还将顺便学习 OOP 基础知识。OOP 提供了一种不同的、通常更有效的编程方式,在这种编程方式中,我们将代码因素化,以尽量减少冗余,并通过定制现有代码来编写新程序,而不是就地修改。
在 Python 中,类是用一条新语句创建的:class 。正如您将看到的,用类定义的对象看起来很像我们在本书前面学习过的内置类型。事实上,类只是应用和扩展了我们已经讲过的思想;粗略地说,它们是使用和处理内置对象类型的函数包。不过,类是为创建和管理新对象而设计的,并且支持继承--这是一种代码定制和重用机制,远远超出了我们迄今为止所看到的任何东西。
首先要说明的是:在 Python 中,OOP 完全是可选的,您不需要为了入门而使用类。您可以使用函数等更简单的构造,甚至是简单的顶级脚本代码来完成大量工作。因为使用好类需要一些前期规划,所以战略模式(长期产品开发)的人比战术模式(时间非常紧缺)的人对类更感兴趣。
尽管如此,正如您将在本书的这一部分看到的,类是 Python 提供的最有用的工具之一。如果使用得当,类实际上可以从根本上缩短开发时间。在流行的 Python 工具(如 tkinter GUI API)中也会用到类,因此大多数 Python 程序员通常会发现,至少对类的基础知识有所了解是有帮助的。
为什么要使用班级?
还记得我在第 4 章和第 10 章中告诉你程序 "用东西做事情 "吗?简单来说,类只是一种定义新事物的方法,反映了程序领域中的真实对象。例如,假设我们决定实现我们在第 16 章中举例说明的那个制作披萨的假想机器人。如果我们使用类来实现它,就能为它在现实世界中的结构和关系建立更多的模型。在这里,OOP 的两个方面被证明是有用的:
- 继承
制作披萨的机器人是机器人的一种,因此它们具有机器人的一般属性。用 OOP 术语来说,我们可以说它们 "继承 "了所有机器人的通用属性。这些通用属性只需在一般情况下实现一次,并可部分或全部重复用于我们将来可能制造的所有类型的机器人。
- 组成
比萨制作机器人实际上是作为一个团队共同工作的组件集合。例如,为了让我们的机器人取得成功,它可能需要手臂来搓面团,需要电机来操纵烤箱,等等。用 OOP 术语来说,我们的机器人就是一个组件的例子;它包含其他对象,这些对象被激活来完成它的任务。每个组件都可以编码为一个类,定义自己的行为和关系。
继承和组合等一般 OOP 思想适用于任何可以分解成一组对象的应用程序。例如,在典型的图形用户界面(GUI)系统中,界面被写成小部件(按钮、标签等)的集合,当它们的容器被绘制时,所有这些小部件都会被绘制(组成)。此外,我们还可以编写自己的自定义部件--带有独特字体的按钮、新配色方案的标签等--它们都是更通用界面设备的专用版本(继承)。
从更具体的编程角度来看,类是 Python 的程序单元,就像函数和模块一样:它们是包装逻辑和数据的另一个隔间。事实上,类也定义了新的命名空间,就像模块一样。但是,与我们已经见过的其他程序单元相比,类有三个关键的区别,使它们在构建新对象时更有用: ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access