华信教育资源网
Python面向对象编程(第4版)
作   译   者:麦叔(李彦强) 出 版 日 期:2024-08-01
出   版   社:电子工业出版社 维   护   人:符隆美 
书   代   号:TP483240 I S B N:9787121483240

图书简介:

这是一本全面介绍Python面向对象编程的图书。本书共分为4部分。第1章至第6章深入讲解了面向对象编程的核心原则和概念,以及它们在Python中的实现方式。第7章至第9章仔细探讨了Python的数据结构、内置类和方法等,以及如何从面向对象编程的角度进行分析和应用。第10章至第12章探讨了设计模式及其在Python中的实现。第13章和第14章涵盖了测试和并发两个重要主题。整本书以一个机器学习分类算法的实现案例贯穿始终,并不断探讨各种实现方式的优劣。 这是一本全面介绍Python面向对象编程的图书。本书共分为4部分。第1章至第6章深入讲解了面向对象编程的核心原则和概念,以及它们在Python中的实现方式。第7章至第9章仔细探讨了Python的数据结构、内置类和方法等,以及如何从面向对象编程的角度进行分析和应用。第10章至第12章探讨了设计模式及其在Python中的实现。第13章和第14章涵盖了测试和并发两个重要主题。整本书以一个机器学习分类算法的实现案例贯穿始终,并不断探讨各种实现方式的优劣。 本书针对的是Python面向对象编程的新手,假设读者具备基本的Python技能。对于有其他面向对象编程语言背景的读者,本书将展示Python的许多特性。
您的专属联系人更多
关注 评论(0) 分享
配套资源 图书内容 样章/电子教材 图书评价
  • 配 套 资 源

    本书资源

    本书暂无资源

    会员上传本书资源

  • 图 书 内 容

    内容简介

    这是一本全面介绍Python面向对象编程的图书。本书共分为4部分。第1章至第6章深入讲解了面向对象编程的核心原则和概念,以及它们在Python中的实现方式。第7章至第9章仔细探讨了Python的数据结构、内置类和方法等,以及如何从面向对象编程的角度进行分析和应用。第10章至第12章探讨了设计模式及其在Python中的实现。第13章和第14章涵盖了测试和并发两个重要主题。整本书以一个机器学习分类算法的实现案例贯穿始终,并不断探讨各种实现方式的优劣。 这是一本全面介绍Python面向对象编程的图书。本书共分为4部分。第1章至第6章深入讲解了面向对象编程的核心原则和概念,以及它们在Python中的实现方式。第7章至第9章仔细探讨了Python的数据结构、内置类和方法等,以及如何从面向对象编程的角度进行分析和应用。第10章至第12章探讨了设计模式及其在Python中的实现。第13章和第14章涵盖了测试和并发两个重要主题。整本书以一个机器学习分类算法的实现案例贯穿始终,并不断探讨各种实现方式的优劣。 本书针对的是Python面向对象编程的新手,假设读者具备基本的Python技能。对于有其他面向对象编程语言背景的读者,本书将展示Python的许多特性。

    图书详情

    ISBN:9787121483240
    开 本:16(185*235)
    页 数:716
    字 数:859

    本书目录

    第1章  面向对象设计	1
    1.1  面向对象简介	1
    1.2  对象和类	3
    1.3  定义属性和行为	6
    1.3.1  用数据描述对象的状态	6
    1.3.2  行为就是动作	9
    1.4  隐藏细节并创建公共接口	10
    1.5  组合	13
    1.6  继承	16
    1.6.1  继承提供抽象	19
    1.6.2  多重继承	19
    1.7  案例学习	21
    1.7.1  简介和问题概述	22
    1.7.2  上下文视图	24
    1.7.3  逻辑视图	27
    1.7.4  过程视图	29
    1.7.5  开发视图	31
    1.7.6  物理视图	33
    1.7.7  结论	34
    1.8  回顾	35
    1.9  练习	35
    1.10  总结	36
    第2章  Python的对象	37
    2.1  类型提示	37
    2.2  创建Python的类	43
    2.2.1  添加属性	44
    2.2.2  让它做点什么	45
    2.2.3  初始化对象	49
    2.2.4  类型提示和默认值	52
    2.2.5  使用文档字符串	53
    2.3  模块和包	56
    2.3.1  组织模块	59
    2.3.2  组织模块内容	63
    2.4  谁可以访问我的数据	68
    2.5  第三方库	69
    2.6  案例学习	72
    2.6.1  逻辑视图	72
    2.6.2  样本和状态	74
    2.6.3  样本状态转换	75
    2.6.4  类的职责	80
    2.6.5  TrainingData类	81
    2.7  回顾	85
    2.8  练习	85
    2.9  总结	86
    第3章  当对象相似时	87
    3.1  基本继承	88
    3.1.1  扩展内置对象	91
    3.1.2  重写和super	94
    3.2  多重继承	96
    3.2.1  钻石型继承问题	100
    3.2.2  不同集合的参数	107
    3.3  多态	110
    
    
    3.4  案例学习	114
    3.4.1  逻辑视图	115
    3.4.2  另一种距离算法	120
    3.5  回顾	122
    3.6  练习	122
    3.7  总结	123
    第4章  异常捕获	124
    4.1  抛出异常	125
    4.1.1  抛出一个异常	127
    4.1.2  异常的作用	129
    4.1.3  处理异常	131
    4.1.4  异常的层级	138
    4.1.5  定义我们自己的异常	139
    4.1.6  异常并不是例外	142
    4.2  案例学习	146
    4.2.1  上下文视图	147
    4.2.2  过程视图	148
    4.2.3  什么可能出错	149
    4.2.4  错误的行为	150
    4.2.5  通过CSV文件创建样本	151
    4.2.6  验证枚举值	155
    4.2.7  读取CSV文件	157
    4.2.8  不要重复你自己	159
    4.3  回顾	160
    4.4  练习	161
    4.5  总结	162
    第5章  何时使用面向对象编程	163
    5.1  将对象看作对象	163
    5.2  通过属性向类数据添加行为	170
    5.2.1  属性的细节	173
    5.2.2  装饰器——另一种创建属性的方法	176
    5.2.3  决定何时使用属性	177
    5.3  管理器对象	180
    5.3.1  删除重复的代码	186
    5.3.2  实践	188
    5.4  案例学习	192
    5.4.1  输入验证	192
    5.4.2  输入分块	195
    5.4.3  样本的类层级	196
    5.4.4  purpose枚举类	198
    5.4.5  Property setters	201
    5.4.6  重复的if语句	201
    5.5  回顾	202
    5.6  练习	202
    5.7  总结	203
    第6章  抽象基类和运算符重载	204
    6.1  创建抽象基类	206
    6.1.1  collections模块中的抽象基类	208
    6.1.2  抽象基类和类型提示	211
    6.1.3  collections.abc模块	212
    6.1.4  创建自己的抽象基类	219
    6.1.5  揭开魔法的神秘面纱	224
    6.2  运算符重载	225
    6.3  扩展内置类	232
    6.4  元类	235
    6.5  案例学习	241
    6.5.1  用两个子列表扩展list类	241
    6.5.2  分割的洗牌策略	244
    6.5.3  分割的增量策略	246
    6.6  回顾	249
    6.7  练习	250
    6.8  总结	251
    第7章  Python的数据结构	252
    7.1  空对象	252
    7.2  元组和命名元组	254
    使用typing.NamedTuple的命名元组	257
    7.3  数据类	260
    7.4  字典	264
    7.4.1  字典的用例	270
    7.4.2  使用defaultdict	271
    7.5  列表	275
    列表排序	278
    7.6  集合	285
    7.7  3种队列	289
    7.8  案例学习	293
    7.8.1  逻辑模型	294
    7.8.2  冻结的数据类	297
    7.8.3  NamedTuple类	300
    7.8.4  结论	303
    7.9  回顾	304
    7.10  练习	304
    7.11  总结	306
    第8章  面向对象编程和函数式编程	307
    8.1  Python的内置函数	307
    8.1.1  len()函数	308
    8.1.2  reversed()函数	309
    8.1.3  enumerate()函数	310
    8.2  方法重载的另一种方式	312
    8.2.1  参数的默认值	314
    8.2.2  可变参数列表	319
    8.2.3  参数解包	326
    8.3  函数也是对象	328
    8.3.1  函数对象和回调函数	330
    8.3.2  用函数给类打补丁	336
    8.3.3  可调用对象	338
    8.4  文件I/O	340
    把它放在上下文中	343
    8.5  案例学习	348
    8.5.1  处理概述	348
    8.5.2  分割数据	350
    8.5.3  重新思考分类	351
    8.5.4  partition()函数	354
    8.5.5  一次性分割	355
    8.6  回顾	358
    8.7  练习	359
    8.8  总结	360
    第9章  字符串、序列化和文件路径	361
    9.1  字符串	362
    9.1.1  字符串操作	363
    9.1.2  字符串格式化	366
    9.1.3  字符串是Unicode	377
    9.2  正则表达式	383
    9.2.1  模式匹配	385
    9.2.2  用正则表达式解析信息	394
    9.3  文件系统路径	398
    9.4  序列化对象	402
    9.4.1  定制pickle	405
    9.4.2  用JSON序列化对象	408
    9.5  案例学习	411
    9.5.1  CSV格式设计	412
    9.5.2  CSV字典阅读器	413
    9.5.3  CSV列表阅读器	416
    9.5.4  JSON序列化	418
    9.5.5  用换行符分隔的JSON	420
    9.5.6  JSON验证	421
    9.6  回顾	424
    9.7  练习	424
    9.8  总结	426
    第10章  迭代器模式	427
    10.1  设计模式简介	427
    10.2  迭代器	428
    迭代器协议	429
    10.3  推导式	432
    10.3.1  列表推导式	432
    10.3.2  集合和字典推导式	435
    10.3.3  生成器表达式	436
    10.4  生成器函数	439
    10.4.1  通过另一个可迭代对象产生元素	444
    10.4.2  生成器堆栈	446
    10.5  案例学习	450
    10.5.1  相关集合知识	451
    10.5.2  多分区	452
    10.5.3  测试	457
    10.5.4  基本的KNN算法	459
    10.5.5  使用bisect模块的KNN	460
    10.5.6  使用headq模块的KNN	462
    10.5.7  结论	462
    10.6  回顾	465
    10.7  练习	465
    10.8  总结	467
    第11章  通用设计模式	468
    11.1  装饰器模式	469
    11.1.1  装饰器模式示例	470
    11.1.2  Python中的装饰器	478
    11.2  观察者模式	482
    观察者模式示例	483
    11.3  策略模式	487
    11.3.1  策略模式示例	488
    11.3.2  Python中的策略模式	492
    11.4  命令模式	493
    命令模式示例	494
    11.5  状态模式	499
    11.5.1  状态模式示例	500
    11.5.2  状态模式与策略模式	508
    11.6  单例模式	509
    单例模式的实现	510
    11.7  案例学习	515
    11.8  回顾	524
    11.9  练习	525
    11.10  总结	526
    第12章  高级设计模式	527
    12.1  适配器模式	527
    适配器模式示例	529
    12.2  外观模式	533
    外观模式示例	534
    12.3  享元模式	538
    12.3.1  Python中的享元模式示例	540
    12.3.2  包含多条消息的缓冲区	547
    12.3.3  使用Python的__slots__优化内存	549
    12.4  抽象工厂模式	551
    12.4.1  抽象工厂模式示例	552
    12.4.2  Python中的抽象工厂模式	558
    12.5  组合模式	559
    组合模式示例	561
    12.6  模板模式	567
    模板模式示例	568
    12.7  案例学习	574
    12.8  回顾	577
    12.9  练习	577
    12.10  总结	579
    第13章  测试面向对象的程序	580
    13.1  为什么要测试	580
    13.1.1  测试驱动开发	582
    13.1.2  测试目标	583
    13.1.3  测试模式	584
    13.2  使用unittest进行单元测试	586
    13.3  使用pytest进行单元测试	588
    13.3.1  pytest的设置和清理函数	591
    13.3.2  pytest用于设置和清理的fixture	594
    13.3.3  更高阶的fixture	599
    13.3.4  用pytest跳过测试	606
    13.4  使用Mock模拟对象	608
    13.4.1  其他打补丁技术	612
    13.4.2  sentinal对象	615
    13.5  进行多少测试才是足够的	617
    13.6  开发和测试	621
    13.7  案例学习	622
    13.7.1  距离算法类的单元测试	623
    13.7.2  Hyperparameter类的单元测试	629
    13.8  回顾	633
    13.9  练习	634
    13.10  总结	636
    第14章  并发	637
    并发处理的背景	638
    14.1  线程	640
    线程的许多问题	642
    14.2  多进程	644
    14.2.1  多进程池	647
    14.2.2  队列	651
    14.2.3  多进程的问题	656
    14.3  future	657
    14.4  AsyncIO	662
    14.4.1  AsyncIO实战	663
    14.4.2  读取AsyncIO future	665
    14.4.3  网络AsyncIO	666
    14.4.4  日志编写演示	674
    14.4.5  AsyncIO客户端	677
    14.5  哲学家用餐问题	681
    14.6  案例学习	685
    14.7  回顾	690
    14.8  练习	690
    14.9  总结	692
    展开

    前     言

    理程序中的各种异常。本书将为你提供所需的一切知识。
    会用Python的人很多,但真正掌握Python深层次技巧的人寥寥无几。在面试过程中,我遇到过许多自称拥有数年Python开发经验的开发者,他们中的不少人来自知名学府。然而,当我向他们提出一些更深入的问题,如涉及迭代器、生成器或某些设计模式的问题时,很多人或答不上来或只有浅薄的理解。他们真应该阅读本书。
    翻译本书绝非易事,因为这要求译者本身具备深厚的专业功底。在过去的十多年里,我一直从事与面向对象设计和大型系统架构相关的工作,对设计模式非常熟悉。我自认为非常适合完成这个任务,所以我决定翻译本书,为国内Python学习社区做点儿贡献。如果你想和我交流,则可以通过B站或公众号找到我,我的自媒体名称是“麦叔编程”。
    本书可能不像入门书那般易读,但它值得你投入时间和精力去深入学习、反复阅读。毕竟,生活中的每一次进步都不容易,编程能力的提升也是如此。我相信,只要你足够努力且勤于思考,就一定能在编程能力上达到新的高度。
    感谢电子工业出版社引进本书,并特别感谢付睿老师在翻译工作上的大力推动。也要感谢Python群里的小伙伴Kevin对部分章节进行了翻译和校对,以及众多粉丝对我的鼓励和支持。
    我要特别感谢我的妻子和儿子。在翻译本书的过程中,我牺牲了大量的业余时间,这些时间原本是属于他们的。没有他们的理解和支持,完成这个翻译任务对我来说几乎是不可能的。
    最后,我想把本书献给我的父亲李庆华,他和母亲一起含辛茹苦地将我和我的姐姐们抚养成人。尽管父亲自己没有机会接受高等教育,但他坚定地要把我们培养成才。
    
    麦叔 写于杭州西子湖畔
    前言
    Python非常流行,可用于开发多种应用程序。Python的设计使得用其创建小型程序相对容易,而为了创建更复杂的软件,我们需要掌握很多重要的编程和软件设计技能。
    本书描述了如何使用面向对象的方法在Python中创建程序,介绍了面向对象编程的术语,并通过逐步深入的案例展示了如何进行软件设计和Python编程。书中还描述了如何利用继承和组合从单个元素开始构建软件,展示了如何使用?Python?的内置异常处理和数据结构,以及Python标准库中的元素。此外,书中还描述了很多设计模式,并提供了详细的示例。
    本书讲解了如何编写自动化测试来确认我们的软件运行正常,还展示了如何使用Python提供的各种并发库,以帮助我们编写可以利用现代计算机中的多核和多处理器的软件。扩展的案例学习部分涵盖了一个简单的机器学习案例,展示了解决复杂问题的多种替代方案。
    本书读者
    本书针对的是Python面向对象编程的新手,假设读者具备基本的Python技能。对于有其他面向对象编程语言背景的读者,本书将展示Python的许多特性。
    Python在数据科学和数据分析领域有很多应用,本书涉及相关的数学和统计概念,在这些领域具备一定的知识可以更好地理解书中概念及其应用。
    本书内容
    本书共分为4部分。第1章至第6章深入讲解了面向对象编程的核心原则和概念,以及它们在Python中的实现方式。第7章至第9章仔细探讨了Python的数据结构、内置类和方法等,以及如何从面向对象编程的角度进行分析和应用。第10章至第12章探讨了设计模式及其在Python中的实现。第13章和第14章涵盖了测试和并发两个重要主题。整本书以一个机器学习分类算法的实现案例贯穿始终,并不断探讨各种实现方式的优劣。
    第1章“面向对象设计”,介绍了面向对象设计的核心概念。这为了解包括状态和行为、属性和方法,以及如何将对象分组到类中提供了路线图。本章还探讨了封装、组合和继承。案例学习部分引入了机器学习问题,是k最近邻(KNN)分类器的实现。
    第2章“Python的对象”,展示了Python类定义的工作原理,包括类型注解(也称类型提示)、类定义、模块和包。本章还讨论了类定义和封装的实际考虑因素。案例学习部分开始实现KNN分类器的一些类。
    第3章“当对象相似时”,讨论了类之间的关系,包括如何利用继承和多重继承。本章还探讨了类层级结构中的多态概念。案例学习部分研究了用于找到最近邻的距离算法的多种设计。
    第4章“异常捕获”,深入探讨了Python的异常和异常处理,包括内置异常层级结构。本章还探讨了如何定义独特的异常来反映特定问题领域或应用程序。案例学习部分把异常应用于数据验证。
    第5章“何时使用面向对象编程”,更深入地探讨了设计技术,包括如何通过Python的特性来实现属性。本章还探讨了管理对象集合的通用概念。案例学习部分应用了这些思想来扩展KNN分类器的实现。
    第6章“抽象基类和运算符重载”,深入探讨了抽象的概念,以及Python如何支持抽象基类。本章还比较了“鸭子类型”和更正式的Protocol定义方法,包括重载Python内置运算符的技术。此外,还探讨了元类及其如何用于修改类构造方法。案例学习部分重定义了一些现有类,展示了如何谨慎地使用抽象来简化设计。
    第7章“Python的数据结构”,介绍了Python内置的多种对象,包括元组、字典、列表和集合。本章还探讨了如何通过数据类和命名元组提供类的常见特性来简化设计。案例学习部分利用这些新技术修改了前面定义的一些类。
    第8章“面向对象编程和函数式编程”,探讨了类以外的Python结构。虽然Python是面向对象的,但函数定义允许我们创建可调用对象,而无须使用复杂的类定义语法。本章还探讨了Python的上下文管理器结构和with语句。案例学习部分探讨了避免一些类复杂性的替代设计。
    第9章“字符串、序列化和文件路径”,涵盖了对象如何被序列化为字符串,以及如何通过解析字符串来创建对象的内容。本章还探讨了几种文件格式,包括pickle、JSON和CSV。案例学习部分重新设计了加载和处理KNN分类器的样本数据。
    第10章“迭代器模式”,描述了Python中无处不在的迭代概念。所有内置集合都是可迭代的,这种设计模式是Python工作方式的核心。本章还探讨了Python推导式和生成器函数。案例学习部分重新考虑了一些早期设计,使用生成器表达式和列表推导式来划分测试和训练样本。
    第11章“通用设计模式”,探讨了一些常见的面向对象设计模式,包括装饰器模式、观察者模式、策略模式、命令模式、状态模式和单例模式。
    第12章“高级设计模式”,探讨了一些更高级的面向对象设计模式,包括适配器模式、外观模式、享元模式、抽象工厂模式、组合模式和模板模式。
    第13章“测试面向对象的程序”,展示了如何使用unittest和pytest为Python应用程序提供自动化单元测试套件。本章还探讨了一些更高级的测试技术,如使用Mock对象来隔离测试单元。案例学习部分展示了如何为第3章中涵盖的距离算法创建测试用例。
    第14章“并发”,探讨了如何利用多核和多处理器计算机系统来快速进行计算,并编写了对外部事件做出响应的软件。本章还探讨了线程和多进程,以及Python的AsyncIO模块。案例学习部分展示了如何使用这些技术对KNN模型进行超参数调优。
    如何充分利用本书
    本书所有示例都通过Python 3.9.5进行了测试,并使用mypy 0.812工具来确认类型提示是否一致。
    对于一些示例,需要从网上下载数据,下载的数据量都比较小。
    一些示例涉及的软件包不是Python内置标准库的一部分。在相关章节中,我们将注明这些软件包并提供安装说明。可以在Python包索引中找到所有这些额外的包,地址为链接56。
    下载示例代码
    可以在GitHub上下载本书的示例代码,地址为链接57。
    本书还在链接58中提供了其他丰富的图书和视频清单,欢迎查看!
    下载彩色图片
    本书提供了一个?PDF?文件,其中包含了本书使用的一些截图、图表等的彩色图片,可以通过链接59下载。
    使用约定
    本书中使用了多种文本约定。
    文本中的代码、数据库表名、文件夹名称、文件名、文件扩展名、路径名、虚拟网址、用户输入和Twitter句柄等可以使用类似这样的方式显示:“你可以通过在>>>提示符下导入antigravity模块来确认Python正在运行”。
    本书对代码块的设置如下:
    class Fizz:
     ? ?def member(self, v: int) -> bool:
     ? ? ? ?return v % 5 == 0
    当我们希望引起你对代码块中特定部分的关注时,相关的行或项目会以粗体显示:
    class Fizz:
      def member(self, v: int) -> bool:  
            return v % 5 == 0
    对任何命令行输入或输出都会这样书写:
    python -m pip install tox
    粗体:表示一个新术语、重要词汇,或会在屏幕上看到的词汇,比如在菜单或对话框中。例如,“从正式角度讲,一个对象是数据和相关行为的集合”。
    展开

    作者简介

    Steven Lott从计算机还是昂贵且稀有的大型设备时就开始编程。他在高科技领域工作了几十年,接触到了许多思想和技术,包括一些不那么好的技术,但其中绝大多数技术是有用的,有助于发展其他技术。Steven Lott自20世纪90年代以来一直在使用Python,开发了各种工具和应用程序。他为Packt出版社撰写了多本图书,包括《Python面向对象编程指南》、《Python经典实例》和《Python函数式编程》。他是一位技术狂人,生活在常年停靠于美国东海岸的一艘船上。他的生活就像这句格言:不要回家,除非你有故事可讲。Dusty Phillips是一位加拿大作家和软件开发人员。他的职业生涯丰富多彩,他曾在大型政府机构、大型社交网络公司工作,也曾在只有两个人的创业公司工作,还曾在规模介于二者之间的机构或公司工作。除了《Python面向对象编程》,Dusty还在O’ Reilly出版社出版了Creating Apps in Kivy一书。他现在专注于写小说。<BR>麦叔,本名李彦强,毕业于浙江大学计算机系,现任某世界头部资产管理公司中国区技术负责人。他是Python和AI技术的爱好者和传播者,同时也是浙江省人工智能学会的理事。麦叔的自媒体账号“麦叔编程”在全网拥有超过10万名粉丝。他在人民邮电出版社出版了《麦叔带你学Python》和《Python办公效率手册》。此外,他还与香港科技大学等高校的老师联合开发了多套深度学习和机器学习课程。麦叔曾多次受邀在北京大学、华为等高校和企业进行人工智能相关技术的分享。他出生于山东,现主要生活在杭州,爱好长跑和爬山,曾多次完成半程马拉松和全程马拉松比赛,并登顶过三山五岳。
  • 样 章 试 读
  • 图 书 评 价 我要评论
华信教育资源网