本节书摘来自异步社区《易学Python》一书中的第6章,第6.1节,作者[澳]Anthony Briggs,王威,袁国忠 译,更多章节内容可以访问云栖社区“异步社区”公众号查看。
第6章 类与面向对象编程
本章介绍如下内容:
- 一种看待类的更简单方式;
- 如何使用类来设计程序。
在本书前面,始终未涉及Python中组织程序的基本方式之一:类。类和面向对象编程通常被认为是一个庞大而吓人的主题,仅供真正的程序员用来编写程序,因此您可能认为,要正确地使用它们,需要大量的理论知识。没有比这种看法更离谱的了。在Python中,使用类和面向编程易如反掌。
在本章中,您将首先复习第2章为游戏Hunt the Wumpus编写的洞穴生成代码,并了解到使用类编写这些代码容易得多;然后,您将以此为基础,参照Adventure和Zork编写一个功能齐备的冒险游戏。在此期间,您将全面学习Python类以及如何充分利用它们。
6.1 类是什么
易学Python
如果您回顾第2章,可能还记得您编写了一系列函数,用于处理玩家进入和wumpus所处的洞穴。有创建洞穴的函数,有使用通道将洞穴连通的函数,有确保所有洞穴都连在一起的函数,不一而足。在第2章编写程序时,您完全依靠函数来处理洞穴;另一种方式是创建一个类来标识这些函数,并将它们之间的关系固定下来。
6.1.1 类包含数据
看待类的另一种方式是,将其视为容器或包装器,包含要在程序中使用的数据。您可将执行特定任务所需的数据都封装起来,并提供处理它们的函数。在数据特别复杂、难以处理或需要保持一致(如跟踪银行账户余额的程序)时,尤其适合这样做。
6.1.2 类是类型
类类似于抽象数据类型,包含一组数据以及可对这些数据执行的所有操作。您无需在类中指定可对数据执行的各种可能操作,而只根据具体情况指定有用的操作。然而,设计类时,考虑其各种可能用途并包含合理的操作常常大有裨益。
6.1.3 类的工作原理
可将类视为橡皮图章,图章刻好后,就可用它轻松地盖章,想盖多少次都行。类的工作原理与此类似。您通常不直接使用类,而使用其实例——使用类创建的对象。
类的一个优点是,如果需要稍微不同的图案,只需复制原来的类,再稍作修改。图6.1以橡皮图章的方式展示了本章将用到的类。
实例和类本身都可以有方法和数据供您调用和访问。在很大程度上说,这些都将在您创建实例时设置,但Python允许您动态地更新它们,甚至重新绑定方法。
注意:
有大量面向对象编程术语,其中很多都让初学者感到迷惑。您将听人提及类、对象、实例、方法、类方法、获取函数、设置函数等。如果您不确定对方的意思,请务必搞清楚他说的是橡皮图章,还是盖在纸上的章。
6.1.4 您的第一个类
程序清单6.1是一个类,您应感到眼熟,虽然有些部分与以前截然不同。这是您在第2章编写的洞穴列表和方法,但将它们封装在类中了。
程序清单6.1 用于存储洞穴的对象
将所有函数都放在类中有什么好处呢?主要好处是所有有关洞穴的细节都包含在您创建的实例中。这样,您可以同时创建其他洞穴系统,而不用担心它们相互冲突。您还可以扩展这个类(包含洞穴名和其他函数)或添加扩展洞穴系统的方法。
注意:
类提供了另一种您可在程序中使用的分而治之机制。创建实例后,您无需考虑其工作原理,而只需考虑可用它来做什么。
然而,这个Caves类存在一个问题。虽然您创建了类且其效果不错,但这依然不是面向对象设计,您只是将既有功能放到了类中。如果以后要添加额外功能,如在洞穴中捡宝、更多怪物等,将很难。在第2章,添加函数改变了程序的设计,同样,为妥善地使用类,必须调整设计重点。