# 运算符 ## 运算符重载基础规则 - 不能重载内置类型的运算符 - 不能新建运算符,只能重载现有的运算符 - 某些运算符不能重载,如is、and、or和not ## 一元运算符 | 符号 | 方法 | 描述 | | ---- | ------------ | ------------------------------------ | | - | `__neg__` | 负号 | | + | `__pos__` | 正号 | | ~ | `__invert__` | 对整数按位取反,定义为`~x == -(x+1)` | | abs | `__abs__` | 取绝对值运算符 | ## 中缀运算符 | 符号 | 正向方法 | 反向方法 | 就地方法 | 描述 | | ----------- | -------------- | ---------- | ---------- | ------------------------------ | | + | `__add__` | `__radd__` | `__iadd__` | 加法、拼接 | | - | `__sub__` | `__rsub__` | `__isub__` | 减法 | | * | `__mul__` | | | 乘法、重复复制 | | / | `__truediv__` | | | 除法 | | // | `__floordiv__` | | | 整除 | | % | `__mod__` | | | 取模 | | `divmod()` | `__divmod__` | | | 返回元组,(整除商,取模余数) | | `**, pow()` | `__pow__` | | | 取幂 | | @ | `__matmul__` | | | 矩阵乘法 | | & | `__and__` | | | 按位与 | | \| | `__or__` | | | 按位或 | | ^ | `__xor__` | | | 按位异或 | | << | `__lshift__` | | | 按位左移 | | >> | `__rshift__` | | | 按位右移 | ## 比较运算符 | 符号 | 正向方法 | 反向方法 | 后备机制 | | ------ | ------------- | ------------- | ------------------- | | `a==b` | `a.__eq__(b)` | `b.__eq__(a)` | 返回 `id(a)==id(b)` | | `a!=b` | `a.__ne__(b)` | `b.__ne__(a)` | 返回 `not (a==b)` | | `a>b` | `a.__gt__(b)` | `b.__lt__(a)` | 抛出`TypeError` | | `a=b` | `a.__ge__(b)` | `b.__le__(a)` | 抛出`TypeError` | | `a<=b` | `a.__le__(b)` | `b.__ge__(a)` | 抛出`TypeError` |