python中常见的重载运算符
什么是运算符重载: 让自定义的类生成的对象(实例)能够使用运算符进行操作.
作用:
- 让自定义的实例或者是对象能够内建对象一样进行运算符操作.
- 让程序简洁易读.
- 对自定义对象将运算符赋予新的规则
算术运算符的重载
|方法名|运算符和表达式|说明| |—-|—-|—-| |
__add__(self,rhs)|self+rhs|加法| |__sub__(self,rhs)|self-rhs|减法| |__mul__(self,rhs)|self*rhs|乘法| |__truediv__(self,rhs)|self/rhs|除法| |__floordiv__(self,rhs)|self//rhs|floor除法| |__mod__(self,rhs)|self%rhs|取模(取余数)| |__pow__(self,rhs)|self**rhs|幂运算| 一般二元运算符的重载方法的格式如下所示:def __xx__(self,other): pass反向运算符的重载
当运算符的左侧为内建类型的时候,右侧为自定义类型进行算术运算的时候会出现
TypeError错误,这是因为无法修改内建类型的代码,所以此时需要使用反向运算符的重载. |方法名|运算符和表达式|说明| |—-|—-|—-| |__radd__(self,lhs)|lhs+self|加法| |__rsub__(self,lhs)|lhs-self|减法| |__rmul__(self,lhs)|lhs*self|乘法| |__rtruediv__(self,lhs)|lhs/self|除法| |__rfloordiv__(self,lhs)|lhs//self|floor除法| |__rmod__(self,lhs)|lhs%self|取模(取余数)| |__rpow__(self,lhs)|lhs**self|幂运算|复合算术运算符的重载
|方法名|运算符和表达式|说明| |—-|—-|—-| |
__iadd__(self,rhs)|self+=rhs|加法| |__isub__(self,rhs)|self-=rhs|减法| |__imul__(self,rhs)|self*=rhs|乘法| |__itruediv__(self,rhs)|self/=rhs|除法| |__ifloordiv__(self,rhs)|self//=rhs|floor除法| |__imod__(self,rhs)|self%=rhs|取模(取余数)| |__ipow__(self,rhs)|self**=rhs|幂运算|比较运算符的重载
|方法名|运算符和表达式|说明| |—-|—-|—-| |
__lt__(self,rhs)|self+=rhs|小于| |__le__(self,rhs)|self-=rhs|小于等于| |__gt__(self,rhs)|self*=rhs|大于| |__ge__(self,rhs)|self/=rhs|大于等于| |__eq__(self,rhs)|self//=rhs|等于| |__ne__(self,rhs)|self%=rhs|不等于|位运算符重载
|方法名|运算符和表达式|说明| |—-|—-|—-| |
__and__(self,rhs)|self & rhs|位与| |__or__(self,rhs)|self | rhs|位或| |__xor__(self,rhs)|self ^ rhs|位异或| |__lshift__(self,rhs)|self << rhs|左移| |__rshift__(self,rhs)|self >> rhs|右移|反向位运算符重载
|方法名|运算符和表达式|说明| |—-|—-|—-| |
__rand__(self,lhs)|lhs & self|位与| |__ror__(self,lhs)|lhs | self|位或| |__rxor__(self,lhs)|lhs ^ self|位异或| |__rrshift__(self,lhs)|lhs << self|左移| |__rfloordiv__(self,lhs)|lhs >> self|右移|一元运算符的重载
|方法名|运算符和表达式|说明| |—-|—-|—-| |
__neg__(self)|- self|负号| |__pos__(self)|+ self|正号| |__invert__(self)|~ self|取反| 用以以下的形式class Test: def __xxx__(self): passin/not in 运算符重载
格式形式如下所示
class Test: def __contains__(self,element): pass当重载了
__contains__()之后,in和not in运算符是都可以使用的.索引和切片运算符重载方法
|方法名|运算符和表达式|说明| |—-|—-|—-| |
__getitem__(self)|x = self[i]|索引/切片取值| |__setitem__(self)|self[i] = v|索引/切片赋值| |__delitem__(self)|del self|del语句删除索引/切片| 可以自定义的类型的对象能够支持索引和切片操作。
文档信息
- 本文作者:MobtgZhang
- 本文链接:https://mobtgzhang.github.io/wiki/python-operator/
- 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)