美文网首页Python 成长笔记
Python拾珍:8. 命名元组

Python拾珍:8. 命名元组

作者: 赵者也 | 来源:发表于2018-03-01 10:20 被阅读6次

很多简单的对象其实都可以看作是几个相关值的集合。例如,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 的返回值是一个类对象:

namedtuple 的返回值是一个类对象

这里 Point 类会自动提供 initstr 这样的方法,所以我们不需要写它们。

要创建一个 Point 对象,可以把 Point 类当作函数来用:

Point 类当作函数来用

init 方法使用我们提供的名字把实参赋给属性。str 方法会打印出 Point 对象及其属性的字符串表示。

可以使用名称来访问命名元组的元素:

使用名称来访问命名元组的元素

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

直接把它当作元组来处理

命名元组提供了快速定义简单类的方法,但其缺点是简单的类并不会总保持简单。可能之后我们需要给命名元组添加方法。如果有这样的需要,我们可以定义一个新类,继承当前的命名元组:

class Pointier(Point):
    #  在这里添加更多的方法

本文参考自《像计算机科学家一样思考Python (第2版)

相关文章

网友评论

    本文标题:Python拾珍:8. 命名元组

    本文链接:https://www.haomeiwen.com/subject/cnqbxftx.html