接口测试的核心概念是什么
315
2022-08-31
python观察日志(part15)--命名元祖namedtuple
学习笔记,有错必纠
命名元祖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 namedtuplePoint = namedtuple('Ponit', ['x', 'y', 'z'])
可以看到,第一个参数为我们想要创建的类名,第二个参数是我们想要创建的类所包含的属性列表,均以字符串表示。namedtuple的返回值是一个类对象:
In [14]: PointOut[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.zOut[16]: (4, 5, 6)
也可以直接把命名元祖当做元祖来使用:
In [18]: point[0], point[1]Out[18]: (4, 5)
命名元祖提供了快速的定义简单类的方式,但缺点是简单的类并不会总是保持简单,可能之后我们要给命名元祖添加方法,这时,我们可以定义一个新类,继承当前的命名元祖:
from collections import namedtuplePoint = 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
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~