登陆注册
71628900000016

第16章 多维向量类

在教学中要示范操作符加载与具体方法的话,我们会提供部署一个向量类来做教学用例。因为在一个多维空间里呈现一个向量的坐标是很好的方式。

例如三维空间,这是与现实生活直接关联在一起的空间。一个向量的坐标可以是(6,-2, 3)虽然我们可以用 Python 的列表来直接表示那些坐标,但是列表无法提供空间向量的抽象部署。特别是在使用列表时,使用+加号操作符的结果不是在向量数位上进行计算,而是串联操作。

当涉及向量的内容时,例如,u =<6,-2, 3>和 v =<1, 4, 2>那么表达式 u + v 所期望的结果是返回一个三维空间向量(7, 2, 5)

因此定义一个 Vector 类就能够提供更好的空间向量抽象部署。当然内部我们会使用到列表数据类型来建立一个存储机制。通过内部保留封装列表,我们可以释放一个公共接口提供给类的实例。例如:

class Vector:

“““多维空间中的一个向量类型。“““

def __init__(self, n):

“““建立 n 维空间里的一个初始化向量。“““

self._coordinates =[0]* n

def __len__(self):

“““返回向量的空间数。“““

return len(self._coordinates)

def __getitem__(self, i):

“““返回向量中第 i 个数位上的坐标值。“““

return self._coordinates[i]

def __setitem__(self, i, value):

“““设置向量中第 i 个数位上的坐标值。“““

self._coordinates[i]= value

def __add__(self, vector):

“““返回两个向量的合计值。“““

if len(self)!= len(vector):

raise ValueError('两个向量的空间数必须相等。')

result = Vector(len(self))

for i in range(len(self)):

result[i]= self[i]+ vector[i]

return result

def __eq__(self, vector):

“““如果两个向量的空间坐标值相等,返回 True 值。“““

return self._coordinates == vector._coordinates

def __ne__(self, vector):

“““如果两个向量的空间坐标值不相等,返回 True 值。“““

return not self == vector

def __str__(self):

“““生成向量的字符串表示形式。“““

return '<'+ str(self._coordinates)[1:-1]+'>'

至此,我们自定义的一个向量数据类型就是这样。虽然部署了一个普通的向量,但也足够说明操作符与操作协议具体方法的关系了。

其中 dunder add 方法是自定义形式,由于上面部署了 dunder len 方法,所以可以对两个向量的空间数作比较。

其中 dunder ne 方法是建立在部署 dunder eq 基础上。dunder str 方法就是向量的字符串表现形式。

这里有一点要注意:

这里定义的 Vector 类,如果实例 v 的空间数是 3 的话,可以自动获得 u = v +[1,2,3]这样的句法支持。那么会产生一个新的向量,加号操作符不再是串联效果了。

这是因为 Python 中的多态机制发挥了作用。多态的字面意思就是许多形式。那么如果 dunder add 方法中的 vector 参数是别的向量的实例呢?那么当然也要具备支持 len(vector)这样的操作才可以,否则就无法访问 vector[i]这样的操作了。

因此代码执行时,右边的被操作数是一种列表数据类型中的元素,需要与长度相匹配。

同类推荐
  • 神言之匙

    神言之匙

    我语既神言!一语碎银河,一言变法则。正、反宇宙融合,暗、反物质显现。以光年铸身躯,高维生物遨游宇宙。以暗能为源力,智慧族群行走虚空。在新纪元,在不停回荡的宇宙史诗中,到底谁被崇为真神?唯我神言,必有法随!
  • 全城戒备开始之战

    全城戒备开始之战

    公元3016年,银河帝国大乱之中,人类的生存与灭亡一瞬之间,英雄拯救这个世界
  • 灵气翻倍

    灵气翻倍

    灵气自古长存。神仙传说是真的吗?秦始皇永生了吗?僵尸为什么不是跳着走路的?......“我修炼速度很快,真的,别人几年,几十年才能到达的境界,我半年就已经完成......”“于是我开始认真修炼,两年后,有个三百岁的老不死找我喝茶,说我骨络惊奇,天赋异禀...”“我开始开小差,想着晚上回去吃什么...”
  • 这个末日很科学

    这个末日很科学

    这是一本实用性极强的末日生存范本这是一部内容精(ku)彩(zao),引人入胜的科幻佳作。学习本作主角们的生存诀窍,将帮助您应付任何可能发生的末日危机!最科学的末日场景,硬核爱好者的第一首选!2020最值得家庭收藏的科幻作品,身临其境的体验被断章的快感!(管你听没听懂,看就完了)
  • 末世之钓鱼专家

    末世之钓鱼专家

    末世降临,进化加速。有天赋的人觉醒了天赋职业,有强大植物学者、有武力值爆棚的战斗狂人、还有获得一套钓鱼工具主角,职业渔夫……刘阳觉醒成为特殊职业者之后,便迅速的接受了现实,好歹也是个远程职业,生存率高啊!手中拿着鱼竿,目标是星辰丧尸海。
热门推荐
  • 破衣之旅

    破衣之旅

    你的衣服很漂亮!可惜它下一秒就没了!一位自称是“天才”的毕业生发明出了拥有特殊能力的衣服,人们可以随时随地换自己喜欢的衣服去战斗。于是“天才”毕业生和来自未来的沙雕,开始了不可思议的奇妙冒险之旅。
  • 临安春色

    临安春色

    大晋延乐公主刘鸢十三岁时父母双亡,三年守孝期满之后正是待嫁之龄。全临安的人都理所当然的认为她会嫁给青梅竹马的锦阳侯公子陆善言,然而,嫁与不嫁,抉择选在她。文案无能,各位朋友请直接点开正文吧。如果你觉得还能一看,请帮忙多多支持一下哦。
  • 呆萌:带着闺蜜去穿越

    呆萌:带着闺蜜去穿越

    傻萌宝宝一昔穿越,顺便把自己的闺蜜也带上了?一曲成名?被赐婚?从天而降的高冷美男王爷直接把自己砸晕。被敌国俘虏?没事,自家夫君可是宠妻成瘾。被带上战场,遇见闺蜜的背叛,冰凉的剑轻触颈部,发誓要以血来抚平自己心中之伤。一边实现着从前的誓言,心底确实隐藏的心机。单纯善良,那只是弱者的行为。可她所谓的坚强,却在真相面前不堪一击。“我们回家吧,还是以前那样,你是我孩子的干妈,我是你孩子的干妈,要是一男一女就让他们成亲,好不好?”“行啊,生两个男的成亲我也愿意。”(甜文,微虐文)
  • 睡神皇后

    睡神皇后

    我能说什么?一睁眼,年轻貌美的小姑娘泪眼汪汪的看着我:“小姐~~~”怒!你才小姐!你全家都小姐!二睁眼,满脸菊花的老婆婆鼻孔朝天的看着我:“公主!”怒!你那是什么态度,别看你老,我就非得尊老爱幼!三睁眼,一妖孽脸都快贴到我脸上了,只见他一脸嫌弃的离开:“嗤!朕的皇后?!”喂!别看你长得帅,我就不敢打你啊!丫的,这是玩马丁的早晨呢?睡一觉还带身份变换的技能呢?!(本文非快穿!本文非快穿!本文非快穿!重要的事情说三遍~(≧▽≦)/~)
  • 神游天下记

    神游天下记

    茫茫红尘中,少年古幽,少年封宁,一起遨游天涯,不知,在这里,会留下属于他们怎样的传说……
  • 兽世乐悠悠:养夫来生崽

    兽世乐悠悠:养夫来生崽

    兽世夫君个个赛平叔,武力高,身份高,逮人手段更高!生平第一次出来旅游,冉柒柒就撞大运地滚下了山坡,然而霉运大神似乎格外眷恋她,让她滚到了另一个世界,这里光怪陆离,还到处横行各种兽!人兽,神兽,鬼兽,还有……魂淡,你们不要再逮她了,她不喜欢兽,更不想生兽崽!本书不是一本正常的书,请眨巴好眼睛再翻阅正文呦。
  • 特殊能力售卖者

    特殊能力售卖者

    在诸天万界售卖各种能力(本书不后宫,有点无敌流)……
  • 龙拳归来

    龙拳归来

    昔日流落金三角的拳王带着成为武圣的梦想重回华夏,从最底层开始,一步步攀升,惩奸除恶,打遍天下无敌手!路见不平,勇当护花小使者。谜一般的身世浮出水面,面对黑暗的势力,绝不低头,誓用双手击破!华夏为之颤抖!
  • 神旨圣意武天下

    神旨圣意武天下

    古老的永恒大陆,神域、圣域、暗域三域并存,对立,僵持,这样诡异的平衡持续了整整十万年。在永恒大陆的正东方,神域所在。神域内,万族并存,宗派林立,三大帝国,七大宗门自神域诞生的那一天起就已经存在,底蕴深厚,实力更是深不可测。神域中央圣地内,居住着神域的缔造者——神君禹皇。十万年前神君禹皇手持止戈息武,为万族开辟出一片安身立命之所,谓之为神域。天历九百八十七年,神君禹皇在巡视过程中,被人伏击身亡,代表神域最高权威的神剑止戈息武也随之失落。神君死后不久,波及整个神域的内战爆发...大秦帝国的三皇子,秦武!一个被天忌惮的男人!!!我们的故事将从秦武十八岁那年开始.......精彩继续,敬请期待! 3月10号19点恢复更新,停更原因,完善作品,给读者朋友更好的体验!
  • 懒癌宅女的恋爱季

    懒癌宅女的恋爱季

    全职网文作者姚酥酥自称不婚主义族.....至到,暗恋上那天阴雨邂逅相遇的男神.......打破了她的人生原则。后来发现,原来巧合的阴雨邂逅是命中注定的,滂沱大雨只是柠檬精老天爷在羡慕他们之间的相遇.....因为,这一次相遇便是一辈子。他(她)最幸运的莫过于,自己暗恋的人也在暗恋自己。