Python内置方法详解(3)

  所有反射运算符魔法方法和它们的常见版本做的工作相同,只不过是处理交换连个操作数之后的情况。绝大多数情况下,反射运算和正常顺序产生的结果是相同的,所以很可能你定义 __radd__ 时只是调用一下 __add__。注意一点,操作符左侧的对象(也就是上面的 other )一定不要定义(或者产生 NotImplemented 异常) 操作符的非反射版本。例如,在上面的例子中,只有当 other 没有定义 __add__ 时 some_object.__radd__ 才会被调用

  __radd__(self, other)

  实现反射加法操作。

  __rsub__(self, other)

  实现反射减法操作。

  __rmul__(self, other)

  实现反射乘法操作。

  __rfloordiv__(self, other)

  实现使用 // 操作符的整数反射除法。

  __rdiv__(self, other)

  实现使用 / 操作符的反射除法。

  __rtruediv__(self, other)

  实现 _true_ 反射除法,这个函数只有使用 from __future__ import division 时才有作用。

  __rmod__(self, other)

  实现 % 反射取余操作符。

  __rdivmod__(self, other)

  实现调用 divmod(other, self) 时 divmod 内建函数的操作。

  __rpow__

  实现 ** 反射操作符。

  __rlshift__(self, other)

  实现反射左移位运算符 << 的作用。

  __rshift__(self, other)

  实现反射右移位运算符 >> 的作用。

  __rand__(self, other)

  实现反射按位与运算符 & 。

  __ror__(self, other)

  实现反射按位或运算符 | 。

  __rxor__(self, other)

  实现反射按位异或运算符 ^ 。

  3.2.4. 增强赋值运算符

  Python同样提供了大量的魔法方法,可以用来自定义增强赋值操作的行为。或许你已经了解增强赋值,它融合了“常见”的操作符和赋值操作,如果你还是没听明白,看下面的例子:  

  x = 5   x += 1 # 也就是 x = x + 1

  这些方法都应该返回左侧操作数应该被赋予的值(例如, a += b __iadd__ 也许会返回 a + b ,这个结果会被赋给 a ),下面是方法列表:

  __iadd__(self, other)

  实现加法赋值操作。

  __isub__(self, other)

  实现减法赋值操作。

  __imul__(self, other)

  实现乘法赋值操作。

  __ifloordiv__(self, other)

  实现使用 //= 操作符的整数除法赋值操作。

  __idiv__(self, other)

  实现使用 /= 操作符的除法赋值操作。

  __itruediv__(self, other)

  实现 _true_ 除法赋值操作,这个函数只有使用 from __future__ import division 时才有作用。

  __imod__(self, other)

  实现 %= 取余赋值操作。

  __ipow__

  实现 **= 操作。

  __ilshift__(self, other)

  实现左移位赋值运算符 <<= 。

  __irshift__(self, other)

  实现右移位赋值运算符 >>= 。

  __iand__(self, other)

  实现按位与运算符 &= 。

  __ior__(self, other)

  实现按位或赋值运算符 | 。

  __ixor__(self, other)

  实现按位异或赋值运算符 ^= 。

  3.2.5. 类型转换操作符

  Python也有一系列的魔法方法用于实现类似 float() 的内建类型转换函数的操作。它们是这些:

  __int__(self)

  实现到int的类型转换。

  __long__(self)

  实现到long的类型转换。

  __float__(self)

  实现到float的类型转换。

  __complex__(self)

  实现到complex的类型转换。

  __oct__(self)

  实现到八进制数的类型转换。

  __hex__(self)

  实现到十六进制数的类型转换。

  __index__(self)

  实现当对象用于切片表达式时到一个整数的类型转换。如果你定义了一个可能会用于切片操作的数值类型,你应该定义 __index__。

  __trunc__(self)

  当调用 math.trunc(self) 时调用该方法, __trunc__ 应该返回 self 截取到一个整数类型(通常是long类型)的值。

  __coerce__(self)

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/b955b7ea058f3baffa168301f7ce90bd.html