Python面向对象编程

Python面向对象编程,python,oop,Python,Oop,我是python OOP编程新手。我正在做这个关于重载操作符的教程(向下滚动到操作符重载)。我不能完全理解这段代码。我希望有人能详细解释这一点。确切地说,我不明白这里是如何添加两个对象的,线条是什么 def __str__(self): return 'Vector (%d, %d)' % (self.a, self.b) def __add__(self,other): return Vector(self.a + other.a,

我是python OOP编程新手。我正在做这个关于重载操作符的教程(向下滚动到操作符重载)。我不能完全理解这段代码。我希望有人能详细解释这一点。确切地说,我不明白这里是如何添加两个对象的,线条是什么

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) 
你在这里干什么



这将生成一个输出向量(7,8)。如何在此处添加对象v1和v2?

v1+v2
被视为对
v1的调用。
,其中
self==v1
other==v2
这是Python数据模型,您的问题得到了回答


基本上,当执行
v1+v2
时,python在内部执行
v1.\uuuu add\uuuu(v2)
此代码执行向量加法,与在纸上添加两个向量的方式相同,它使用标量加法组合相应的组件。您正在重写
\uuuu添加\uuuu
方法来告诉解释器 如何为您的类执行加法

守则:

self.a + other.a
self.b + other.b
组合向量类的一个组件。守则:

self.b + other.b
使用b类型的适当加法函数组合向量类的b组件

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


+
操作符将调用类上的
\uuuuu add\uuuuu
方法来执行添加。

在类似的情况下,在调试器中逐行逐行遍历代码总是很好的。它带来了比你想象的更多的信息。它基本上会引导您完成每个操作。