2011-02-05 140 views
-1

我的试用如下所示,但它不起作用。对派生类调用__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。但是,使用派生类会发生错误。

请给我一些帮助,并祝大家农历新年快乐,提前谢谢。

回答

1

基于错误信息,您__coerce__实现实际上有

return self.y

代替

return self,y

为你写的示例代码。

上面的代码适用于我,而且您实际上甚至不需要此处的__coerce__方法。在你的例子中,只要有__radd__就足够了。

+0

我做了这些实验代码。这是我第一次使用\ __ coerce__方法作为操作符重写。无论如何,谢谢你(^ - ^),你是对的。我的代码唯一的问题是','! – shinavro 2011-02-05 07:14:12