2013-04-23 54 views
0

我的代碼:我無法讓我的add方法

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

回答

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 + c2返回selfc1__add__)。

用我的代碼,原來的第二個對象將被刪除,並且一個新的對象將被綁定到c2

+0

我以爲它必須這樣做,非常感謝! – ajkey94 2013-04-23 18:58:01

0

你的問題在於你在__add__方法中修改self。你不應該這樣做(儘管你可以,因爲Python認爲所有涉及的人都是「成年人的自願」......有時候,這是正確的解決方案。雖然我想不出一個場景, be)

self你的__add__方法被綁定到c1,所以你修改了c1;然後將其分配給c2。

嘗試在最後添加print(c1 is c2)。它將打印True

帕維爾的__add__表現爲__add__方法應該。