您好:
參考
https://www.runoob.com/python3/python3-class.html
如下範例
請問為何
1.print (v1 + v2) ,他會去自己找 str 來列印?
2.當v1+v2 時,因為是兩個instance 相加,所以它會自動對應到 類的__add__ 函數?
這樣,他是以v1 為主,還是 v2?
謝謝!
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)
print("v1--",v1.a);
print("v2--",v2.a);
結果
Vector (7, 8)
v1-- 2
v2-- 5
關於1,可參考邦友這篇:repr與str雜談
詳情可以看cPython的source code的builtin_print_impl跟PyFile_WriteObject
其中PyObject_Str最後就是走到__str__,而PyObject_Repr就是走到__repr__
關於2,你可以簡單改個實驗就知道了:
def __add__(self,other): #加運算
return Vector(self.a, self.b)
https://docs.python.org/zh-tw/3/reference/datamodel.html?highlight=new#basic-customization