其他核心类型——用户定义的类 | 第二部分 类型与操作 —— 第 4 章: 介绍 python 对象类型 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-金年会app官方网
在本书后面将深度学习python中的面向对象编程(一个可选但强大的语言特性,它通过支持自定义编程来减少开发时间)。然而,抽象地说,类定义了扩展核心类型的新对象类型,因此它们值得在这里快速了解一下。比如,假设希望有一个对雇员建模的对象类型。虽然在python中没有这种特定的核心类型,但下面的用户定义类可能会满足要求:
>>> class worker:
def __init__(self, name, pay): # 创建时初始化
self.name = name # self 是新对象
self.pay = pay
def lastname(self):
return self.name.split()[-1] # 按空格分割字符串
def giveraise(self, percent):
self.pay *= (1.0 percent) # 就地更新报酬
此类定义了一个新的对象类型,它将有name
和pay
属性(有时被称作状态信息),还有被编码为函数(通常叫做方法)的两个行为片段。像调用函数那样调用类来产生新类型的实例,类方法自动接收实例,该实例被指定的方法调用(在self
参数中)处理:
>>> bob = worker('bob smith', 50000) # 创建两个实例
>>> sue = worker('sue jones', 60000) # 每个实例有 name 和 pay 属性
>>> bob.lastname() # 调用方法:bob 是 self
'smith'
>>> sue.lastname() # sue 是 self 实体
'jones'
>>> sue.giveraise(.10) # 更新 sue 的报酬
>>> sue.pay
66000.0
暗含的“self”对象是为什么称这种方法为面向对象模型的原因:在类的函数中总是有一个暗含的实体。然而,在某种意义上,基于类的类型是简单地建立在核心类型上并使用它的——比如,这里的用户定义的worker
对象只是字符串和数字的集合(分别是name
和pay
),加上处理那两个内置对象的函数。
类更大的故事是它们的继承机制支持软件层次结构,使它们可以通过扩展进行自定义。通过编写新类而不是改变已经在正常工作的类来扩展软件。还应该知道类是python的一个可选特性,更简单的内置类型如列表和字典通常是比用户编码的类更好的工具。然而,这远远超出了对象类型入门教程的范围,所以把它看成是一个预览吧;要完全理解使用类编码的用户定义类型,必须继续阅读。因为类建立在python中的其它工具上,所以类是本书旅程中的主要目标之一。