0

我的代码:

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 不变?

4

2 回答 2

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对象(从'sc1 + c2返回)。selfc1__add__

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

于 2013-04-23T18:50:37.580 回答
0

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

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

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

Pavel 的__add__行为与一种__add__方法应该是一样的。

于 2013-04-23T19:05:56.027 回答