在派生类上调用__coerce __()方法会导致错误

时间:2011-02-05 05:39:31

标签: python inheritance derived-class coerce

我的试验如下,但没有用。

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 (most recent call last):
  File "", line 1, in 
    y+x
  File "", line 3, in __coerce__
    return self.y
AttributeError: MyNum instance has no attribute 'y'

当我使用__coerce__()方法而不使用类派生时,结果为 x+y等于radd called // 32。但是,对于derived-class,会发生错误。

请给我一些帮助,祝新年快乐,请提前谢谢。

1 个答案:

答案 0 :(得分:1)

根据错误消息,您的__coerce__实施实际上已经

return self.y

而不是

return self,y

正如您在示例代码中所写的那样。

上面的代码对我有用,而你实际上甚至不需要__coerce__方法。只需拥有__radd__即可。