-1

私の試行は以下のようでしたが、うまくいきませんでした。

class MyNum:
   def __init__(self , n):
   self.n = n

class MyNum2(MyNum):
   def __coerce__(self , y):
        return self, y

   def __radd__(self, y):
        print 'radd called'
        return self.n + y.n

Pythonコマンドラインで次のように入力しました:

>>> x = MyNum(20)
>>> y = MyNum2(12)
>>> x+y

結果:

>>> トレースバック (最新の呼び出しが最後):
  ファイル ""、1 行目、
    y+x
  ファイル ""、3 行目、__coerce__ 内
    self.y を返す
AttributeError: MyNum インスタンスに属性 'y' がありません

__coerce__()クラスを派生させずにメソッド を使用すると、 の結果は にx+y等しくなりradd called // 32ます。ただし、派生クラスではエラーが発生します。

助けてください。旧正月、よろしくお願いします。

4

1 に答える 1

1

エラーメッセージに基づいて、__coerce__実装には実際に

return self.y

の代わりに

return self,y

サンプルコードで書いたように。

__coerce__上記のコードは私にとってはうまくいきますが、実際にはここでメソッドさえ必要ありません。あなたの例では、を持って__radd__いるだけで十分です。

于 2011-02-05T06:13:29.033 に答える