书籍作者:Dusty | ISBN:9787121341366 |
书籍语言:简体中文 | 连载状态:全集 |
电子书格式:pdf,txt,epub,mobi,azw3 | 下载次数:4690 |
创建日期:2021-02-14 | 发布日期:2021-02-14 |
运行环境:PC/Windows/Linux/Mac/IOS/iPhone/iPad/Kindle/Android/安卓/平板 |
本书主要介绍如何使用Python 3进行面向对象编程。1~4章介绍面向对象这一编程范式的基本准则,以及Python是如何运用这些准则实现面向对象编程的;第5~8章,介绍如何利用Python中的内置函数快速、简单地实现面向对象编程;第9~11章介绍了许多面向对象编程中常用的设计模式,以及如何使用符合 Python 语言习惯的方式来实现这些设计模式;最后第12、13章介绍了Python 3中并发编程相关的主题。本书中每一章都会包含一节案例学习的内容,通过一个实践相关的案例将本章介绍的主要内容以及前面章节中介绍过的内容串联起来。除此之外,每一章最后的练习旨在指导你利用本章学习到的内容,使用面向对象编程改善以往项目中的代码,并进一步掌握如何在合适的时机使用Python 3进行面向对象编程。
Dusty Philips是一位来自加拿大的软件开发者和作者,现居于华盛顿西雅图。作者在过去15年间活跃于开源社区并主要以Python作为开发语言。他是著名的Puget Sound Programming Python会议组的共同创始人,如果你在附近区域欢迎前往参加相关会议。《Python 3面向对象编程》由Packt出版社出版,这是他的**本书。他同时也创作了书籍《用Kivy创建应用》(O'Reilly),介绍关于Python的移动开发库。同时其发布了Hacking Happy,介绍技术人员的精神健康之旅。他曾在本书第1版出版之后不久因为自杀倾向而入院治疗,并自此成为积极精神健康的公开倡导者。
Dusty Philips是一位来自加拿大的软件开发者和作者,现居于华盛顿西雅图。作者在过去15年间活跃于开源社区并主要以Python作为开发语言。他是著名的Puget Sound Programming Python会议组的共同创始人,如果你在附近区域欢迎前往参加相关会议。《Python 3面向对象编程》由Packt出版社出版,这是他的**本书。他同时也创作了书籍《用Kivy创建应用》(O'Reilly),介绍关于Python的移动开发库。同时其发布了Hacking Happy,介绍技术人员的精神健康之旅。他曾在本书第1版出版之后不久因为自杀倾向而入院治疗,并自此成为积极精神健康的公开倡导者。
本书包含如下内容。
√ 通过创建类、定义方法来实现Python对象
√ 将相关对象归类到不同类中,并通过类接口描述这些对象的属性和行为
√ 使用继承关系扩展类的功能
√ 理解何时使用面向对象特征,以及更重要的是,何时不该使用
√ 发现哪些设计模式在Python中有所不同及其原因
√ 发现单元测试的简易之处,以及为何它对于Python如此重要
√ 学习Python 3中常见的并发技术及其陷阱
√ 探索*新的AsyncIO模块来开发大规模并发网络系统
译者序
Python是一门多范式编程语言,这意味着你可以用它进行面向对象编程,也可以选择使用面向过程编程的方式,甚至可以尝试函数式编程。而Python最令人着迷之处在于,它拥有极大灵活性的同时,使用的是十分简单、优雅的语法,因此甚至被称为“可执行的伪代码”。本书主要围绕Python面向对象编程相关的概念与方法,同时也介绍了一些Python 3的新增功能、特性。众所周知,Python 3的升级、推广在Python开发者中一直存在较多争议,批判者的声音主要集中在其向后不兼容这一点。不过译者认为Python 3是非常值得开发者花时间去学习、升级的,Python 3中的字符串默认采用UTF-8编码,这无疑给中文环境的开发者带来了极大的便捷;此外,采用新的异步编程模型也使得Python在服务器开发领域更具竞争力。幸运的是,本书对于这几点都通过单独章节分别进行了详细介绍,无论读者是刚刚接触Python的初学者,还是打算将Python从之前的版本升级到最新的版本,本书都将很有帮助。
第2版序
我需要忏悔,在我写本书第1版的时候,我根本不知道自己在做什么。我认为我了解Python并且知道该怎么写。很快我就发现这是错的。幸运的是,通过本书的写作我已经完全适应了这两点。
我担心大家可能会不喜欢《Python 3 面向对象编程》这本书,所以我两年没有参加PyCon。直到收获了几十条正面的反馈,我才重获信心,终于参加了2012年在圣克拉拉举办的PyCon。我很快发现每个人都听说过我或我的书,完全是我庸人自扰!
书写完之后我也很怕重新阅读它。在收到诸多赞誉之前,它一直严实地放在我的书架上,直到我需要引用其中的内容回答读者的提问。在准备本书第2版的时候,我最终不得不面对我的心魔。令我惊喜和开心的是,我发现5年前自己所写的这本书既准确又令人愉快,一如很多读者的评价所提到的。
初次阅读之后不久,我收到了来自 Amazon 上的第一条负面评价。如果我在完成本书后立即看到这条评价,那将是毁灭性的。幸运的是,4年来的正面评价以及我自己对写作上的自信,让我可以忽略辛辣的批评并将剩下的部分作为建设性的反馈。事实上,读者提出的很多瑕疵都是本书最初出版时Python还未实现的特征。《Python 3面向对象编程》出版已经有些年头了,显然已经到了需要升级的时候。升级的结果现在已经在你手里(或在你的电子书阅读器上)。
我经常纳闷,为什么技术类书籍的作者要如此详细地描述不同版本书籍之间的区别。我的意思是,有多少人会在读了第1版之后还读第2版呢?就像软件的版本一样,你可以笃定最新的版本是最好的,但你不会真的想要关心它的历史。不过,这本书占据了我过去一年大部分的时间,所以我不得不提一下这本书已经变得多好了。
其实第1版组织得稍微有些混乱,很多章节结束之后直接跳到下一章,有几个关键位置上的主题之间存在跳跃,甚至更糟糕的是,彼此不相关。现在,讨论设计模式之前的2章被重新调整并分为3章,这样更加顺畅地切换到下一个主题。
我同时也彻底删除了关于Python 3第三方库的一整章内容。在Python 3和这本书都还是新鲜事物的时候,这一章的存在还算合理。只有几个库移植到Python 3,对它们进行详尽的讨论是合理的。不过,我没办法深入探讨这些主题的细节,坦白地说,针对每一个主题我都可以再写一整本书。
最后,我添加了全新的一章,关于并发的内容。关于这一章我纠结了一阵,现在可以坦白承认它与面向对象编程并没有直接的关系。然而,和单元测试那一章一样,我认为理解并发是所有语言中不可或缺的部分,特别是对于Python生态系统中的面向对象编程。当然,如果你不同意大可跳过这些章节(或者等你改变主意之后再来阅读它们)。
请尽情享受这本书以及你的面向对象编程之旅!
Dusty Phillips
前言
本书介绍了面向对象范式的相关术语,通过循序渐进的例子聚焦面向对象设计。本书介绍从简单且是面向对象编程工具箱中最有用的继承关系,到异常处理和设计模式的内容,以一种面向对象的方式来看待面向对象的概念。
在这一过程中,我们将会学习整合 Python 编程语言中面向对象和非面向对象的方面,学习操作文件和字符串的复杂性,并强调(正如Python 3 所做的)二进制和文本数据的区别。
我们将会发现单元测试的乐趣,会用到两个单元测试框架。最后,我们会探索Python众多的并发范式,学习如何让不同对象在同一时间一起运行。
本书包含哪些内容
本书可以粗略地分为4个主要部分。前4章我们将会深入探讨面向对象编程的准则以及Python是如何运用它们的。第5~8章我们将会通过学习这些准则是如何应用到Python内置函数中的,来探讨一些Python特有的应用。第9~11 章是关于设计模式的内容。最后两章探讨与Python编程相关同时可能很有趣的主题。
第1章,面向对象设计,介绍了重要的面向对象概念。主要关于一些相关术语,如抽象、类、封装、继承。我们也简单地介绍了用来建模类和对象的UML。
第2章,Python对象,讨论类和对象以及如何在Python中使用它们。我们将会学习Python对象的属性和行为,以及如何将类组织到包和模块中去。最后,我们将会学习如何保护我们的数据。
第3章,对象相似时,帮助我们更加深入地探讨继承关系。包括多重继承以及如何扩展内置类型。这一章也介绍了多态和鸭子类型在Python中是如何运作的。
第4章,异常捕获,介绍异常和异常处理。我们将会学习如何创建我们自己的异常,以及如何利用异常控制程序流程。
第5章,何时使用面向对象编程,介绍如何创建和使用对象。我们将会看到如何用属性封装数据以及限制数据的访问。这一章也讨论了DRY准则以及如何避免代码重复。
第6章,Python数据结构,介绍Python内置类的面向对象特征。我们将会学习元组、字典、列表以及集合,还有几个更高级的容器类型。我们也将学习如何扩展这些标准对象。
第7章,Python面向对象的捷径,正如标题所言,这一章介绍使用Python节省时间的方法。我们将会学习很多有用的内置函数,例如用默认参数实现方法重载。我们也将看到函数本身也是对象的特性以及如何利用这一特性。
第8章,字符串与序列化,介绍字符串、文件以及格式化。我们将会讨论字符串、字节以及字节数组之间的区别,还有将序列化文本、对象和二进制数据转化为几种规范表示的多种不同方式。
第9章,迭代器模式,介绍了设计模式的概念,以及迭代器模式的Python图形化实现。我们将会学习列表、集合以及字典的推导形式。我们也将理解生成器与协程。
第10章,Python设计模式I,介绍了几种设计模式,包括装饰器模式、观察者模式、策略模式、状态模式、单例模式以及模板模式。每一种设计模式都通过Python实现的相关的例子程序进行讨论。
第11章,Python设计模式II,专注讨论更多的设计模式,如适配器模式、门面模式、享元模式、命令模式、抽象模式以及组合模式。用更多的例子说明Python习惯用法与规范实现之间的区别。
第12章,测试面向对象程序,以介绍为何对Python应用进行测试如此重要为开始。强调测试驱动开发,并介绍两种不同的测试工具unittest和py.test。最后,讨论模拟测试对象和代码覆盖率相关内容。
第13章,并发,这一章是关于Python所支持(以及缺乏)的并发模式的速成教程。讨论了线程、多进程、Future以及新的AsyncIO库。
每一章都包含相关的例子和一个案例学习,案例学习会将本章内容整合到一个可运行的(可能不完整的)程序中。
学习本书你需要用到什么
本书中所有的例子都是基于Python 3解释器的。确保你用的不是Python 2.7或更早的版本。在写本书时,Python 3.4是最新的版本。大部分例子也可以在较早版本的Python 3中运行,但是为了最大限度地减少可能给你带来的失望情绪,最好用最新版本。
所有的例子都可以运行在任何支持Python的操作系统上。如果不能,请作为错误信息提交给我。
有些例子需要连接互联网。你可能会想要有一个这样的课外研究和调试。
除此之外,本书中有些例子依赖于不使用Python的第三方库。在用到它们的时候会进行介绍,因此你并不需要提前安装。但是为了保持完整性,下面列出会用到的所有库:
? pip
? requests
? pillow
? bitarray
本书的目标读者
本书尤其针对那些没有面向对象编程经验的人,同时也假设你已经拥有了基本的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()
当我们想要让你特别关注
第1章 面向对象设计 1
面向对象 1
对象和类 3
指定属性和行为 5
数据描述对象 5
行为就是动作 7
隐藏细节并创建公共接口 8
组合 11
继承 13
继承提供抽象 15
多重继承 16
案例学习 16
练习 24
总结 24
第2章 Python对象 26
创建Python类 26
添加属性 28
让它做点什么 29
初始化对象 32
自我解释 34
模块和包 36
组织模块 38
组织模块内容 41
谁可以访问我的数据 44
第三方库 46
案例学习 48
练习 56
总结 57
第3章 对象相似时 58
基本的继承 58
扩展内置对象 60
重写和super 62
多重继承 63
钻石型继承问题 66
不同集合的参数 71
多态 74
抽象基类 77
使用抽象基类 77
创建抽象基类 78
魔术揭秘 80
案例学习 82
练习 95
总结 95
第4章 异常捕获 96
抛出异常 96
抛出一个异常 98
异常的作用 99
处理异常 101
异常的层级 106
定义我们自己的异常 108
案例学习 112
练习 122
总结 123
第5章 何时使用面向对象编程 124
将对象看作对象 124
通过属性向类数据添加行为 128
属性的细节 131
装饰器――另一种创建属性的方法 133
决定何时使用属性 134
管理员对象 136
移除重复代码 139
实践 141
案例学习 144
练习 152
总结 153
第6章 Python数据结构 154
空对象 154
元组和命名元组 155
命名元组 157
字典 159
字典用例 162
使用defaultdict 163
列表 166
列表排序 168
集合 171
扩展内置类型 175
队列 180
FIFO队列 181
LIFO队列 183
优先级队列 184
案例学习 186
练习 193
总结 194
第7章 Python面向对象的捷径 195
Python内置函数 195
len()函数 195
反转函数 196
枚举 198
文件I/O 199
放在上下文管理器中 201
方法重载的另一种方式 203
默认参数 204
变量参数列表 206
参数解包 209
函数也是对象 210
将函数作为属性 215
可调用对象 216
案例学习 217
练习 224
总结 225
第8章 字符串与序列化 226
字符串 226
字符串操作 227
字符串格式化 229
字符串是Unicode 236
可变字节字符串 240
正则表达式 241
匹配模式 242
从正则表达式中获取信息 246
序列化对象 249
自定义序列化 251
序列化Web对象 253
案例学习 256
练习 262
总结 263
第9章 迭代器模式 265
设计模式简介 265
迭代器 266
迭代器协议 266
推导 269
列表推导 269
集合与字典推导 271
生成器表达式 272
生成器 274
从另一个可迭代对象中产生 277
协程 279
回到日志解析 282
关闭协程并抛出异常 285
协程、生成器与函数的关系 285
案例学习 286
练习 293
总结 294
第10章 Python设计模式I 295
装饰器模式 295
装饰器的例子 296
Python中的装饰器 299
观察者模式 301
观察者模式的例子 302
策略模式 304
策略模式的例子 305
Python中的策略 307
状态模式 307
状态模式的例子 308
状态与策略 314
状态转换作为协程 314
单例模式 315
单例模式的实现 315
模板模式 319
模板模式的例子 319
练习 323
总结 324
第11章 Python设计模式II 325
适配器模式 325
门面模式 328
享元模式 331
命令模式 335
抽象工厂模式 340
复合模式 344
练习 349
总结 350
第12章 测试面向对象程序 351
为什么要测试 351
测试驱动开发 353
单元测试 354
断言方法 355
减少模板代码并进行清理 357
组织和运行测试 359
忽略失败的测试 359
用py.test进行测试 361
一种完成设置和清理的方式 363
一种完全不同的设置变量的方式 366
在py.test中跳过测试 370
模拟昂贵的对象 371
多少测试才足够 375
案例学习 378
实现它 379
练习 384
总结 385
第13章 并发 386
线程 386
线程的诸多问题 390
线程的超常开支 391
多进程 392
多进程池 394
队列 396
多进程的问题 398
Future对象 398
AsyncIO 401
AsyncIO实践 402
读取AsyncIO中的Future对象 403
在网络编程中使用AsyncIO 404
用executor封装阻塞代码 407
流 409
案例学习 410
练习 416
总结 417