加入收藏 | 设为首页 | 会员中心 | 我要投稿 大庆站长网 (https://www.0459zz.com/)- 科技、智能边缘云、事件网格、云计算、站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python C 覆盖二维向量类中的__mul__以保持传播性

发布时间:2023-12-22 09:34:34 所属栏目:Python 来源:DaWei
导读: 我已经定义了以下类:


class Point(object):

def __repr__(self):
return "("+str(self.x)+","+str(self.y)+")"

def __init__(self,x,y):
self.x = x

我已经定义了以下类: class Point(object): def __repr__(self): return "("+str(self.x)+","+str(self.y)+")" def __init__(self,x,y): self.x = x self.y = y def __add__(self,point): return Point(self.x+point.x,self.y+point.y) def __sub__(self,point): return Point(self.x-point.x,self.y-point.y) def __mul__(self,num): return Point(num*self.x,num*self.y) def length(self): return (self.x**2 + self.y**2)**.5

以下代码有效:

x = Point(1,2) y = Point(1,3) print x+y print (y+x) print (x-y) print (y-x) print y*3

输出:

(2,5) (2,5) (0,-1) (0,1) (3,9)

但这不是:

print 3*y

它给出以下错误:

----> 1 print 3*y TypeError: unsupported operand type(s) for *: 'int' and 'Point'

这是因为点类被输入到int mul函数中,我假设.如何保持Point类中包含的point的定义,并且仍然有3 * y返回与y * 3相同的值?

解决方法 3 * y

我们在左侧有一个int实例,在右边有一个Point实例. Point不是int的子类.在这种情况下,int .__ mul__类获得了此操作的第一次机会,并且Point .__ mul__在这个问题上没有发言权.

你必须在你的班级上实现Point .__ rmul__来处理这个案子.

(编辑:大庆站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章