很多简单的对象其实都可以看作是几个相关值的集合。例如,Point 对象,通常包含两个数字,即 x 和 y。定义一个这样的类时,通常从 init 方法和 str 方法开始:
class Point:
def __init__(self, x=0, y=0):
self.x = x
self.y = y
def __str__(self,):
return '(%g, %g)' % (self.x, self.y)
这里用了很多代码来传达很少的信息。Python 提供了一个更简洁的方式来表达同一个意思:
from collections import namedtuple
Point = namedtuple('Point', ['x', 'y'])
第一个参数是我们想要创建的类名。第二个参数是 Point 对象应当包含的属性的列表,以字符串表示。namedtuple 的返回值是一个类对象:

这里 Point 类会自动提供 init 和 str 这样的方法,所以我们不需要写它们。
要创建一个 Point 对象,可以把 Point 类当作函数来用:

init 方法使用我们提供的名字把实参赋给属性。str 方法会打印出 Point 对象及其属性的字符串表示。
可以使用名称来访问命名元组的元素:

也可以直接把它当作元组来处理:

命名元组提供了快速定义简单类的方法,但其缺点是简单的类并不会总保持简单。可能之后我们需要给命名元组添加方法。如果有这样的需要,我们可以定义一个新类,继承当前的命名元组:
class Pointier(Point):
# 在这里添加更多的方法
本文参考自《像计算机科学家一样思考Python (第2版)》
网友评论