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

本来の価値が失われます。あなたのコードでは、c1との両方が最初のオブジェクトc2を指します ( fromのを返します)。Testc1 + c2selfc1__add__

私のコードでは、元の 2 番目のオブジェクトが削除され、新しいオブジェクトが にバインドされc2ます。

于 2013-04-23T18:50:37.580 に答える
0

あなたの問題は、__add__メソッドで self を変更するという事実にあります。あなたはそれをするべきではありません(ただし、Pythonは関係するすべての人を「同意する大人」と見なしているため、可能ですが...そして時には、それが正しい解決策になることもあります。なれ)

そしてself、あなたの__add__メソッドは c1 にバインドされるので、c1 を変更します。それを c2 に割り当てます。

最後に追加print(c1 is c2)してみてください。印刷されますTrue

Pavel'sは、メソッドが想定されて__add__いるとおりに動作します。__add__

于 2013-04-23T19:05:56.027 に答える