当前位置 : 主页 > 编程语言 > python >

python观察日志(part15)--命名元祖namedtuple

来源:互联网 收集:自由互联 发布时间:2022-06-15
学习笔记,有错必纠 命名元祖namedtuple 有很多简单的对象其实可以看做几个相关值的集合,例如,在下面这段代码中,我们定义Point类,它包含两个数字x和y: class Point : def __init__ ( se

学习笔记,有错必纠



命名元祖namedtuple



有很多简单的对象其实可以看做几个相关值的集合,例如,在下面这段代码中,我们定义Point类,它包含两个数字x和y:

class Point:
def __init__(self, x = 0, y = 0, z = 0):
self.x = x
self.y = y
self.z = z

def __str__(self):
return "({}, {}, {})".format(self.x, self.y, self.z)

p = Point(1, 2, 3)
print(p)

输出:

(1, 2, 3)

这里,我们用很多代码来传达很少的意思。

Python为我们提供了更简洁的方式来表达同一个意思:

from collections import namedtuple
Point = namedtuple('Ponit', ['x', 'y', 'z'])

可以看到,第一个参数为我们想要创建的类名,第二个参数是我们想要创建的类所包含的属性列表,均以字符串表示。namedtuple的返回值是一个类对象:

In [14]: Point
Out[14]: __main__.Ponit

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

我们可以创建一个Point类的对象:

point = Point(4, 5, 6)
print(point)

输出:

Ponit(x=4, y=5, z=6)

我们也可以使用名称来访问命名元祖的元素:

In [16]: point.x,point.y,point.z
Out[16]: (4, 5, 6)

也可以直接把命名元祖当做元祖来使用:

In [18]: point[0], point[1]
Out[18]: (4, 5)



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

from collections import namedtuple

Point = namedtuple('Ponit', ['x', 'y', 'z'])

class NewPoint(Point):
def _init__(self, x = 0, y = 0, z = 0):
super.__init__(x, y, z)
def distance(self):
return (self.x**2 + self.y**2 + self.z**2)**(1/2)


newp = NewPoint(3, 0, 4)
print(newp.distance())

输出:

5.0


【文章原创作者:高防ip http://www.558idc.com/gfip.html欢迎留下您的宝贵建议】
上一篇:python观察日志(part16)--收集关键词参数
下一篇:没有了
网友评论