2011-02-05 27 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