- 译者序
- 前言
- 第1章 问答环节
- 第2章 Python 如何运行程序
- 第3章 如何运行程序
- 第4章 介绍 Python 对象类型
- 第5章 数字
- 第6章 动态类型简介
- 第7章 字符串
- 第8章 列表与字典
- 第9章 元组、文件及其他
- 第10章 Python 语句简介
- 第11章 赋值、表达式和打印
- 第12章 if 测试和语法规则
- 第13章 while 和 for 循环
- 第14章 迭代器和解析,第一部分
- 第15章 文档
- 第16章 函数基础
- 第17章 作用域
- 第18章 参数
- 第19章 函数的高级话题
- 第20章 迭代和解析,第二部分
- 第21章 模块:宏伟蓝图
- 第22章 模块代码编写基础
- 第23章 模块包
- 第24章 高级模块话题
- 第25章 OOP:宏伟蓝图
- 第27章 更多实例
- 第28章 类代码编写细节
- 第29章 运算符重载
- 第30章 类的设计
- 第31章 类的高级主题
- 第32章 异常基础
- 第34章 异常对象
- 第35章 异常的设计
- 第36章 Unicode 和字节字符串
- 字符串基础知识
- Python 的字符串类型
- 文本和二进制文件
- Python 3.0 中的字符串应用
- 转换
- 编码 Unicode 字符串
- 编码非ASCII文本
- 编码和解码非ASCII文本
- 其他 Unicode 编码技术
- 转换编码
- 在 Python 2.6 中编码 Unicode 字符串
- 源文件字符集编码声明
- 使用 Python 3.0 Bytes 对象
- 序列操作
- 创建 bytes 对象的其他方式
- 混合字符串类型
- 使用 Python 3.0(和 Python 2.6)bytearray 对象
- 使用文本文件和二进制文件
- Python 3.0 中的文本和二进制模式
- 类型和内容错误匹配
- 使用 Unicode 文件
- 在 Python 3.0 中处理 BOM
- Python 2.6 中的 Unicode 文件
- Python 3.0 中其他字符串工具的变化
- Struct二进制数据模块
- pickle对象序列化模块
- XML解析工具
- 本章小结
- 本章习题
- 习题解答
- 第37章 管理属性
- 第38章 装饰器
- 第39章 元类
- 附录A 安装和配置
- 附录B 各部分练习题的解答
- 作者介绍
- 封面介绍
习题解答
2.当实例稍后载入内存中的时候,shelve(实际上,它们使用pickle模块)自动地把该实例重新连接到它创建自的类。Python从其模块内部重新导入该类,创建一个带有其存储的属性的实例,并且把实例的__class__连接设置到指向其最初的类。通过这种方式,载入实例自动获取所有其他最初方法(如lastName、giveRaise和__str__),即便我们没有把实例的类导入我们的作用域中。
3.把处理放入方法中很重要,这样一来,未来只有一个副本需要修改,并且方法可以在任何实例之上运行。这就是Python封装的概念,把逻辑封装到接口背后,更好地支持未来的代码维护。如果没有这么做,就会产生代码冗余性,将来代码修改的时候工作就会加倍。
4.用子类定制可以减少开发工作。在OOP中,我们通过定制已经做过的事情来编码,而不是复制和修改已有的代码。这是OOP中真正的“大思路”,因为我们可以通过编写新的子类来很容易地扩展以前的工作,我们可以利用已经做过的事情。这比每次从头开始编写要好很多,也好过引入多个冗余的代码副本,它们未来可能全部都必须更新。
5.不管是什么样的情况,复制和修改代码会使未来的潜在工作翻倍。如果一个子类需要执行超类方法中编写的默认行为,通过超类的名称回去调用最初的方法而不是复制其代码,这种做法要好很多。这对于超类的构造函数也有效。再次强调,复制代码会产生冗余性,当代码改进的时候这是一个主要的问题。
6.通用性工具可以避免硬编码解决方案,而后者必须随着时间推移和类的改进保持与类的其他部分同步。例如,一个通用的__str__打印方法,不需要在__init__构造函数中每次为实例添加一个新属性的时候都更新。此外,一个通用的打印方法只由所有出现的类继承,并且只需要在一处修改,即在通用版本中修改,从通用类继承的所有类都会选取它。再一次说明,删除代码冗余性会减少未来的开发工作;这是类带来的主要好处之一。
7.与直接定制相比较(像Manager特化Person),继承是最佳的代码扩展。对于多个对象聚合到一个完整的对象,并且由一个控制器层类主导的情况,组合非常实用。继承向上传递调用以实现复用,组合向下传递以实现委托。继承和组合不是互斥的;嵌入一个控制器中的对象,往往其本身是基于继承来定制的。
8.本章中的类可以用作样本代码来实现各种类型的数据库。基本上,我们可以修改构造函数来记录不同的属性,并提供各种适用于目标应用程序的方法,从而改变用途。例如,可以使用诸如name、address、birthday、phone、email等属性来构建一个联系人数据库,并且可以采用适合这一用途的方法。例如,调用名为sendmail的方法的时候,可能会使用Python标准库的smptlib模块来自动向一个联络人发送邮件(参见Python手册或应用层级的图书来了解关于这样的工具的更多细节)。我们这里编写的AttrDisplay工具可能用来逐字打印对象,因为它有意设计为通用的。这里的大多数shelve数据库代码都可以用来存储对象,只需要稍作修改即可。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论