我在制作添加方法时遇到问题

时间:2013-04-23 18:49:40

标签: python python-3.x

我的代码:

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相同?

2 个答案:

答案 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

它的原始值丢失了。使用您的代码,c1c2都会指向第一个Test对象(c1 + c2self {{1}返回c1 }})。

使用我的代码,原始的第二个对象将被删除,一个新对象将绑定到__add__

答案 1 :(得分:0)

您的问题在于您在__add__方法中修改了self。你不应该这样做(虽然你可以,因为Python认为所有参与者都是“同意成年人”......有时,这将是正确的解决方案。虽然我想不出它会出现的情况定)

self方法中的__add__绑定到c1,因此修改c1;然后你将它分配给c2。

尝试在最后添加print(c1 is c2)。它将打印True

Pavel的__add__表现为__add__方法。