美文网首页
Python中 __radd__ 等运算符的变更

Python中 __radd__ 等运算符的变更

作者: 逸筱幻 | 来源:发表于2018-04-26 17:24 被阅读0次

    先看下面一段代码

    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__ 等被重载的运算符,在满足下面两种情况下才会被调用

    • 两个操作数类型不同
    • 左边的操作数没有实现__add__方法或 __add__ 返回 NotImplemented

    相关文章

      网友评论

          本文标题:Python中 __radd__ 等运算符的变更

          本文链接:https://www.haomeiwen.com/subject/qxjmlftx.html