运算符重载的作用是让用户定义的对象使用中缀运算符或一元运算符
中缀运算符
是一个通用的算术或逻辑公式表示方法, 操作符是以中缀形式处于操作数的中间(例:3 4),中缀表达式是人们常用的算术表示方法。
与前缀表达式(例: 34)或后缀表达式(例:34 )相比,中缀表达式不容易被计算机解析,但仍被许多程序语言使用,因为它符合人们的普遍用法。
中缀运算符
一元运算符
一元运算符只对一个表达式执行操作,该表达式可以是数值数据类型类别中的任何一种数据类型。
Python对运算符重载的限制
- 不能重载内置类型的运算符
- 不能新建运算符,只能重载现有的
- 某些运算符不能重载:
is
、and
、or
和not
一元运算符处理方式
支持一元运算符,只需要实现相应的特殊方法。这些特殊方法只有一个参数self
需要遵循一个基本规则:始终返回一个新对象。不能修改self
,要创建并返回合适类型的新实例。
一元取负算术运算符
-
:__neg__
一元取正算术运算符
:__pos__
对整数按位取反
~
:__invert__
重载加法运算符
定义__add__(self, other)
方法
加法运算符
__radd__
是__add__
的「反射」版本或「反向」版本
一般__radd__
直接委托__add__
def __radd__(self, other):
return self other
比较运算符
- 正向和反向调用使用的是同一系列方法
- 对
==
和!=
来说,如果反向调用失败,python会比较对象的ID,而不抛出TypeError
比较运算符
增量赋值运算符
增量赋值运算符不会修改不可变目标,而是新建实例,然后重新绑定