本书介绍了面向对象范例的术语。它着重于面向对象的设计,并提供了一步一步的示例。它指导我们从简单继承(面向对象程序员工具箱中最有用的工具之一)到异常处理,再到设计模式,这是一种面向对象的方法来看待面向对象的概念。
在此过程中,我们将学习集成 Python 编程语言的面向对象和非面向对象方面。我们将学习字符串和文件操作的复杂性,强调二进制数据和文本数据之间的差异(就像 Python 3 所做的那样)。
然后,我们将介绍单元测试的乐趣,使用的不是一个,而是两个单元测试框架。最后,我们将通过 Python 的各种并发范例探索如何使对象同时良好地协同工作。
这本书大致分为四大部分。在前四章中,我们将深入探讨面向对象编程的形式化原则以及 Python 如何利用这些原则。在第 5 章到第 8 章中,我们将通过学习如何将这些原则应用于各种 Python 内置函数来介绍 Python 对这些原则的一些特殊应用。第 9 章到第 11 章介绍了设计模式,最后两章讨论了可能感兴趣的与 Python 编程相关的两个额外主题。
第一章面向对象设计涵盖了重要的面向对象概念。它主要处理抽象、类、封装和继承等术语。我们还简要介绍了用 UML 建模类和对象的方法。
第 2 章,Python 中的对象,讨论了类和对象以及它们在 Python 中的使用方式。我们将学习 Python 对象的属性和行为,以及将类组织到包和模块中。最后,我们将了解如何保护我们的数据。
第三章当对象相似时,让我们更深入地了解继承。它涵盖了多重继承,并向我们展示了如何扩展内置。本章还介绍了多态性和 duck 类型在 Python 中的工作原理。
第 4 章期待意外的,探讨异常和异常处理。我们将学习如何创建自己的异常,以及如何使用异常进行程序流控制。
第 5 章何时使用面向对象编程涉及对象的创建和使用。我们将了解如何使用属性包装数据并限制数据访问。本章还讨论了 DRY 原理以及如何避免重复代码。
第 6 章Python 数据结构介绍了 Python 内置类的面向对象特性。我们将介绍元组、字典、列表和集合,以及一些更高级的集合。我们还将了解如何扩展这些标准对象。
第 7 章、Python 面向对象快捷方式(顾名思义)涉及 Python 中的省时功能。我们将研究许多有用的内置函数,例如使用默认参数的方法重载。我们还将看到函数本身就是对象,这是多么有用。
第 8 章字符串和序列化介绍字符串、文件和格式。我们将讨论字符串、字节和字节数组之间的区别,以及将文本、对象和二进制数据序列化为几种规范表示的各种方法。
第 9 章迭代器模式向我们介绍了设计模式的概念,并介绍了 Python 对迭代器模式的标志性实现。我们将学习列表、集合和字典理解。我们还将揭开生成器和协同程序的神秘面纱。
第 10 章Python 设计模式 I涵盖了几种设计模式,包括装饰者、观察者、策略、状态、单例和模板模式。每一种模式都用合适的例子和用 Python 实现的程序进行了讨论。
第 11 章Python 设计模式 II结束了我们对设计模式的讨论,涵盖了适配器、外观、flyweight、命令、抽象和复合模式。本文还提供了更多示例,说明惯用 Python 代码与规范实现的区别。
第 12 章测试面向对象程序首先介绍了为什么测试在 Python 应用程序中如此重要。它强调测试驱动的开发,并引入了两种不同的测试套件:unittest 和 py.test。最后,讨论了模拟测试对象和代码覆盖率。
第 13 章、并发是 Python 对并发模式的支持(以及缺乏支持)的旋风之旅。它讨论了线程、多处理、未来和新的异步 IO 库。
每章都包括相关的例子和案例研究,这些例子和案例研究将本章的内容收集到一个工作(如果不完整的话)程序中。
本书中的所有示例都依赖于 Python 3 解释器。确保您没有使用 Python2.7 或更早版本。在撰写本文时,Python3.4 是 Python 的最新版本。大多数示例都适用于 Python3 的早期版本,但我们鼓励您使用最新版本以最大限度地减少挫折感。
所有示例都应该在 Python 支持的任何操作系统上运行。如果不是这样,请将其报告为错误。
一些示例需要一个工作的 Internet 连接。不管怎样,你可能会想要其中一个用于课外研究和调试!
此外,本书中的一些示例依赖于 Python 不附带的第三方库。它们在使用时会在书中介绍,因此无需提前安装。然而,为了完整起见,这里有一个列表:
- 皮普
- 请求
- 枕头
- 位数组
这本书专门针对那些不熟悉面向对象编程的人。它假设您具有基本的 Python 技能。您将深入学习面向对象原则。它对于使用 Python 作为“粘合”语言并希望提高编程技能的系统管理员类型特别有用。
如果您熟悉其他语言中的面向对象编程,那么本书将帮助您理解在 Python 生态系统中应用知识的惯用方法。
本书使用多种文本样式来区分不同类型的信息。下面是这些风格的一些例子,并解释了它们的含义。
文本中的码字、数据库表名、文件夹名、文件名、文件扩展名、路径名、虚拟 URL、用户输入和 Twitter 句柄如下所示:“我们在字典中查找类,并将其存储在名为PropertyClass
的变量中。”
代码块设置如下:
def add_property(self):
property_type = get_valid_input(
"What type of property? ",
("house", "apartment")).lower()
payment_type = get_valid_input(
"What payment type? ",
("purchase", "rental")).lower()
当我们希望提请您注意代码块的特定部分时,相关行或项目以粗体显示:
def add_property(self):
property_type = get_valid_input(
"What type of property? ",
("house", "apartment")).lower()
payment_type = get_valid_input(
"What payment type? ",
("purchase", "rental")).lower()
任何命令行输入或输出的编写方式如下:
>>> c1 = Contact("John A", "johna@example.net")
>>> c2 = Contact("John B", "johnb@example.net")
>>> c3 = Contact("Jenna C", "jennac@example.net")
>>> [c.name for c in Contact.all_contacts.search('John')]
['John A', 'John B']
新术语和重要词语以粗体显示。例如,您在屏幕上、菜单或对话框中看到的文字出现在文本中,如下所示:“如果参数不足错误,它将失败,类似于我们之前忘记self
参数时收到的错误。”
警告或重要注释显示在这样的框中。
提示和技巧如下所示。
我们欢迎读者的反馈。让我们知道你对这本书的看法你喜欢还是不喜欢。读者反馈对我们来说很重要,因为它可以帮助我们开发出您将真正从中获得最大收益的标题。
要向我们发送总体反馈,只需发送电子邮件<[feedback@packtpub.com](mailto:feedback@packtpub.com)>
,并在邮件主题中提及该书的标题。
如果您对某个主题有专业知识,并且您有兴趣撰写或贡献一本书,请参阅我们的作者指南www.packtpub.com/authors。
既然您是一本 Packt 图书的骄傲拥有者,我们有很多东西可以帮助您从购买中获得最大收益。
您可以从您的账户下载示例代码文件 http://www.packtpub.com 对于您购买的所有 Packt 出版书籍。如果您在其他地方购买了本书,您可以访问http://www.packtpub.com/support 并注册,将文件直接通过电子邮件发送给您。
虽然我们已尽一切努力确保内容的准确性,但错误确实会发生。如果您在我们的一本书中发现错误,可能是文本或代码中的错误,如果您能向我们报告,我们将不胜感激。通过这样做,您可以使其他读者免于沮丧,并帮助我们改进本书的后续版本。如果您发现任何错误,请访问进行报告 http://www.packtpub.com/submit-errata ,选择您的书籍,点击勘误表提交表链接,输入您勘误表的详细信息。一旦您的勘误表得到验证,您的提交将被接受,勘误表将上载到我们的网站或添加到该标题勘误表部分下的任何现有勘误表列表中。
要查看之前提交的勘误表,请转至https://www.packtpub.com/books/content/support 并在搜索字段中输入图书名称。所需信息将出现在勘误表部分下。
在互联网上盗版版权材料是所有媒体都面临的一个持续问题。在 Packt,我们非常重视版权和许可证的保护。如果您在互联网上发现任何形式的非法复制品,请立即向我们提供地址或网站名称,以便我们采取补救措施。
请致电<[copyright@packtpub.com](mailto:copyright@packtpub.com)>
与我们联系,并提供可疑盗版材料的链接。
我们感谢您在保护我们的作者方面提供的帮助以及我们为您带来有价值内容的能力。
如果您对本书的任何方面有任何问题,可以通过<[questions@packtpub.com](mailto:questions@packtpub.com)>
与我们联系,我们将尽力解决该问题。