Python中 __radd__ 等運(yùn)算符的變更

先看下面一段代碼

class Case:
  def __radd__(self, other):
    return 1

print(Case() + Case())
python2.7.10 中打印的值為
print(Case() + Case())// -> 1
python 3.6中打印的值為
print(Case() + Case())// -> TypeError: unsupported operand type(s)
官方文檔中有一段說明

These methods are called to implement the binary arithmetic operations (+, -, *, @, /, //, %, divmod(), pow(), **, <<, >>, &, ^, |) with reflected (swapped) operands. These functions are only called if the left operand does not support the corresponding operation [3] and the operands are of different types. [4] For instance, to evaluate the expression x - y, where y is an instance of a class that has an rsub() method, y.rsub(x) is called if x.sub(y) returns NotImplemented.

大意是在python3中,像 __radd__, __rmul__ 等被重載的運(yùn)算符,在滿足下面兩種情況下才會(huì)被調(diào)用

  • 兩個(gè)操作數(shù)類型不同
  • 左邊的操作數(shù)沒有實(shí)現(xiàn)__add__方法或 __add__ 返回 NotImplemented
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容