-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

结果:

>>> Traceback(最近一次调用最后一次):
  文件“”,第 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 回答