我的代码:
class Test(object):
def __init__(self, number):
self.number = number
def __str__(self):
return "This number is {}".format(self.number)
def __add__(self, second):
self.number = self.number + second.number
return self
c1 = Test(1)
c2 = Test(2)
c2 = c1 + c2
print(c2)
print(c1)
输出:
This number is 3
This number is 3
我的麻烦是当我尝试添加它时它会改变c1和c2。我如何保持c1相同?
答案 0 :(得分:3)
返回一个新对象:
class Test(object):
def __init__(self, number):
self.number = number
def __str__(self):
return "This number is {}".format(self.number)
def __add__(self, second):
return Test(self.number + second.number)
请注意,重新绑定c2
时,请执行以下操作:
c2 = c1 + c2
它的原始值丢失了。使用您的代码,c1
和c2
都会指向第一个Test
对象(c1 + c2
从self
{{1}返回c1
}})。
使用我的代码,原始的第二个对象将被删除,一个新对象将绑定到__add__
。
答案 1 :(得分:0)
您的问题在于您在__add__
方法中修改了self。你不应该这样做(虽然你可以,因为Python认为所有参与者都是“同意成年人”......有时,这将是正确的解决方案。虽然我想不出它会出现的情况定)
self
方法中的__add__
绑定到c1,因此修改c1;然后你将它分配给c2。
尝试在最后添加print(c1 is c2)
。它将打印True
。
Pavel的__add__
表现为__add__
方法。