- 译者序
- 前言
- 第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 各部分练习题的解答
- 作者介绍
- 封面介绍
用类方法统计实例
这个类与前面的版本使用方式相同,但是通过类和实例调用printNumInstances方法的时候,它接受类而不是实例:
当使用类方法的时候,别忘了,它们接收调用的主体的最具体(低层)的类。当试图通过传入类更行类数据的时候,这具有某些细微的隐藏含义。例如,如果在模块test.py中我们像前面那样对定制子类化,扩展Spam.printNumInstances以显示其cls参数,并且开始一个新的测试会话:
无论何时运行一个类方法的时候,最低层的类传入,即便对于没有自己的类方法的子类:
这里的第一个调用中,通过Sub子类的一个实例调用了一个类方法,并且Python传递了最低的类,Sub,给该类方法。在这个例子中,由于该方法的Sub重定义显式地调用了Spam超类的版本,S pam中的超类方法在第一个参数中接收自己。但是,对于直接继承类方法的一个对象,看看发生了什么:
这里的最后一个调用把Other传递给了Spam的类方法。这在这个例子中也有效,因为它通过继承获取了在S pam中找到的计数器。如果该方法试图把传递的类的数据赋值,它将更新Object,而不是Spam。在这个特定的例子中,可能Spam通过直接编写自己的类名来更新其数据会更好,而不是依赖于传入的类参数。
使用类方法统计每个类的实例
实际上,由于类方法总是接收一个实例树中的最低类:
·静态方法和显式类名称可能对于处理一个类本地的数据来说是更好的解决方案。
·类方法可能更适合处理对层级中的每个类不同的数据。
代码需要管理每个类实例计数器,这可能会更好地利用类方法。在下面的代码中,顶层的超类使用一个类方法来管理状态信息,该信息根据树中的每个类都不同,而且存储在类上——这类似于实例方法管理类实例中状态信息的方式:
静态方法和类方法都有其他高级的作用,我们将在这里略过,请参见其他资源了解更多的使用示例。在最近的Python版本中,随着装饰语法的出现,静态方法和类方法的设计都变得更加简单——装饰语法是把一个函数应用于另一个函数的一种方法,该语法比它所激励的静态方法的使用具有更好的用途。这一语法允许我们在Python 2.6和Python 3.0中扩展类,以初始化最后一个示例中numInstances这样的计数器的数据。下一小节说明了如何做到这点。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论