Python面向对象编程

4

我是Python面向对象编程的新手。我正在按照这里(向下滚动至运算符重载)的教程进行运算符重载练习,但是我不太理解这段代码。希望有人能详细解释一下,具体来说,我不理解这里是如何将两个对象相加的,以及其中的哪些行代码:

def __str__(self):
          return 'Vector (%d, %d)' % (self.a, self.b)           
def __add__(self,other):
          return Vector(self.a + other.a, self.b + other.b) 

你在这里做什么?


#!/usr/bin/python

class Vector:
   def __init__(self, a, b):
      self.a = a
      self.b = b

   def __str__(self):
      return 'Vector (%d, %d)' % (self.a, self.b)

   def __add__(self,other):
      return Vector(self.a + other.a, self.b + other.b)

v1 = Vector(2,10)
v2 = Vector(5,-2)
print v1 + v2

这里生成了一个输出向量(7,8)。v1和v2对象是如何相加的呢?


2
特殊方法名称 - wwii
2
在这种情况下,通过调试器逐行查看代码总是很好的选择。它会揭示比你想象中更多的信息。基本上,它将引导您了解每个操作正在执行的内容。 - M Leonard
3个回答

5

v1 + v2 被视为对 v1.__add__(v2) 的调用,其中 self == v1other == v2


2
这是Python数据模型,你的问题已经在这里得到了回答: 这里
基本上当执行v1 + v2时,Python内部执行v1.__add__(v2)

2

这段代码正在执行向量加法,与你在纸上相加两个向量的方式相同,它使用标量加法组合相应的分量。您可以重写__add__方法来告诉解释器如何为您的类执行加法。

代码:

self.a + other.a

将您的向量类的一个组件合并。 代码如下:

self.b + other.b

使用与b类型相应的加法函数,将您的向量类的b组件合并。

这些新的组件值被传递给Vector类的构造函数,以返回一个新的向量。

+运算符将调用您的类上的__add__方法执行加法操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接