返回介绍

第25章 OOP:宏伟蓝图

发布于 2024-01-29 22:24:15 字数 1868 浏览 0 评论 0 收藏 0

到目前为止,本书经常使用“对象”这个术语。其实,编写代码达到现在这个水平,都是以对象为基础。我们在脚本中传递对象、用在表达式中和调用对象的方法等。不过,要让代码真正归类于面向对象(OO),那么对象一般也需要参与到所谓的继承层次中。

本章要开始我们对Python类的探索:类是在Python实现支持继承的新种类的对象的部件。类是Python面向对象程序设计(OOP)的主要工具,而本书这一部分内容中,我们将会一直讨论OOP的基础内容。OOP提供了一种不同寻常而往往更有效的检查程序的方式,利用这种设计方法,我们分解代码,把代码的冗余度降至最低,并且通过定制现有的代码来编写新的程序,而不是在原处进行修改。

在Python中,类的建立使用了一条新的语句:class语句。正如你将看到的那样,通过class定义的对象,看起来很像本书之前研究过的内置类型。事实上,类其实是只运用并扩展了我们谈到过的一些想法。概括地讲,类就是一些函数的包,这些函数大量使用并处理内置对象类型。不过,类的设计是为了创建和管理新的对象,并且它们也支持继承。这是一种代码定制和复用的机制,到现在为止,我们还没有见过。

还有件事要注意:在Python中,OOP完全是可选的,并且在初学阶段不需要使用类。实际上,可以用较简单的结构,例如函数,甚至简单顶层脚本代码,这样就可以做很多事。因为妥善使用类需要一些预先的规划。因此和那些采用战术模式工作的人相比(时间有限),采用战略模式工作的人(做长期产品开发)对类会更感兴趣一些。

然而,阅读本书这一部分你会得知,类是Python所提供的最有用的工具之一。合理使用时,类实际上可以大量减少开发的时间。类也在流行的Python工具中使用,例如,tkinter GUI API。所以大多数Python程序员往往都会发现,学习类的基础知识是很有帮助的。

为何使用类

还记得本书曾介绍过,程序就是“用一些东西来做事”吗?简而言之,类就是一种定义新种类的东西的方式,它反映了在程序领域中的真实对象。例如,假设要实现第16章作为例子的虚拟的制作比萨的机器人。如果通过类来实现,就可以建立其实际结构和关系的模型。从两个方面来讲OOP都证明很有用处。

继承

制作比萨的机器人就是某种机器人,它拥有一般机器人属性。从OOP术语来看,制作比萨的机器人继承了所有机器人的通用类型的属性。这些通用的属性只需要在通用的情况下实现一次,就能让未来我们所创建的所有种类的机器人重用。

组合

制作比萨机器人其实是一些组件的集合,这些组件以团队的形式共同工作。例如,机器人要成功,也许会需要机器臂滚面团,马达启动烤箱等。以OOP的术语来讲,机器人是一个组合的实例,它包含其他对象,这些对象来运作完成相应的指令。每个组件都可以写成类,定义自己的行为以及关系。

像继承和组合这些一般性OOP概念,适用于能够分解成一组对象的任何应用程序。例如,在一般GUI系统中,接口是写成图形组件的集合(按钮、标签等),当绘制图形组件的容器时,图形组件也会跟着绘制(组合)。此外,我们可以编写定制的图形组件——有独特字体的按钮、有新的配色的标签等,这些都是更通用接口机制(继承)的特定化的版本。

从更具体的程序设计观点来看,类是Python的程序组成单元,就像函数和模块一样:类是封装逻辑和数据的另一种方式。实际上,类也定义新的命名空间,在很大程度上就像模块。但是,和我们已见过的其他程序组成单元相比,类有三个重要的独到之处,使其在建立新对象时更为有用。

多重实例

类基本上就是产生对象的工厂。每次调用一个类,就会产生一个有独立命名空间的新对象。每个由类产生的对象都能读取类的属性,并获得自己的命名空间来储存数据,这些数据对于每个对象来说都不同。

通过继承进行定制

类也支持OOP的继承的概念。我们可以在类的外部重新定义其属性从而扩充这个类。更通用的是,类可以建立命名空间的层次结构,而这种层次结构可以定义该结构中类创建的对象所使用的变量名。

运算符重载

通过提供特定的协议方法,类可以定义对象来响应在内置类型上的几种运算。例如,通过类创建的对象可以进行切片、级联和索引等运算。Python提供了一些可以由类使用的钩子,从而能够中断并实现任何的内置类型运算。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文