class Point:
def __init__(self, x = 0, y = 0):
self.x = x
self.y = y
def __sub__(self, other):
x = self.x + other.x
y = self.y + other.y
return Point(x,y)
p1 = Point(3, 4)
p2 = Point(1, 2)
result = p1-p2
print(result.x, result.y) # prints (4,6)
任何人都可以解释上述代码的工作原理。无法理解它。
我知道__sub__
是python中的运算符重载符并拦截了p1-p2调用。但它如何与两个单独的类实例一起工作?
答案 0 :(得分:1)
__sub__
应该是等同于-
算术运算符的神奇方法,所以不确定为什么你添加它们......
除此之外,当您执行p1 - p2
时,它与p1.__sub__(p2)
相同。在__sub__
上调用p1
函数,进行计算并返回新的Point
对象。
答案 1 :(得分:1)
现在您编辑了问题,答案很简单:
p1 = Point(3, 4)
p2 = Point(1, 2)
result = p1-p2
你有两个分数作为参数self, other
,所以,自我,显然在你的例子中是 p1
,而其他是 p2
< / strong>,在完成所有计算后,您会返回一个新的点,因此p1
和p2
不会被修改。
重要建议
最罕见的是,你称之为__sub__
,但实际上,你实际上是添加!我的意思是,请...更改方法定义并替换+ by - ,或更改__sub__
......只是一条建议。