2013-12-16 60 views
0

我想編寫一個模擬數字數據類型的類。我的新類型提供了__add____radd__方法。添加這種類型的對象,如a+b工作正常,還有a+1工程。爲什麼int引發TypeError而不是NotImplemented?

我的問題是,當我嘗試使用1+aint add函數被調用這引起了一個TypeError,使翻譯停止,並且不試圖打電話給我__radd__這是可行的。

python doc指出「如果其中一種方法[即__add____radd__]不支持使用所提供參數的操作,則應返回NotImplemented」。爲什麼int沒有提升NotImplemented?有沒有辦法解決這個問題,而不是讓我的類成爲int的子類?

回答

1

你的數字模型的理解是正確的:

>>> class Foob(object): 
...  def __add__(self, o): return 1 
...  def __radd__(self, o): return 2 
... 
>>> f = Foob() 
>>> f + f 
1 
>>> f + 5 
1 
>>> 5 + f 
2 

__radd__代碼最終必須養TypeError - 可能通過調用int+類型不正確。什麼是堆棧跟蹤看起來像?

+0

是的,你是對的。這在python3中有效。我剛剛發現,這不適用於python3的ipython!這意味着我的問題是由ipython引起的。 – sauerburger

相關問題