Python __sub__用于类实例

时间:2017-08-03 16:43:43

标签: python

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调用。但它如何与两个单独的类实例一起工作?

2 个答案:

答案 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>,在完成所有计算后,您会返回一个新的,因此p1p2不会被修改。

  

重要建议

最罕见的是,你称之为__sub__,但实际上,你实际上是添加!我的意思是,请...更改方法定义并替换+ by - ,或更改__sub__ ......只是一条建议。