3

私はPythonとプログラミング全般にかなり慣れていないので、「fu」の欠如を許してください。:)

このクラス呼び出しを理解できません:

スニペット

class bar:
    def __init__(self, a):
        self.a = a
    def __add__(self, b):
        s = self.a + b.a
        return s

最後のスニペット

したがって、インタープリターから、次を発行すると:

x = bar(10)
y = bar(20)
z = x + y
print(z)

「30」を返します。そのとおりです。

self.a がどのように作成されるかはわかりますが、加算を行うために ba がどのように作成されるかはわかりません。

任意のガイダンスをいただければ幸いです。

4

3 に答える 3

4

呼び出すx + yと、実際には次のように変換されます。

x.__add__(y)

したがって、このメソッドは次のように呼び出されます。

__add__(self, b)  # __add__(x, y)

結果は次のとおりです。

s = x.a + y.a     # 30
return 30
于 2013-07-10T15:28:28.700 に答える
3

このコードでは、ba は作成されておらず、アクセスされています。基本的に、引数 b として y を渡しています。aこれには、 type のオブジェクトであるため、既に関連付けられている属性がありますbar。コードをステップ実行する場合は、http://www.pythontutor.comにアクセスしてください。

于 2013-07-10T15:28:51.147 に答える
0

x = bar(a)bar'a' の値を持つクラスのオブジェクトを作成します。各barオブジェクトには、 という名前のプロパティ/変数がありますa

では、 xx + yの関数がパラメーターとして使用して呼び出されます。addy

だからb = y、意味b.a = y.a = 20

于 2013-07-10T15:29:45.597 に答える