Table of Contents |
????- 算术运算符的重载 ????- 反向运算符的重载 ????- 复合赋值算术运算符的重载 ????- 比较算术运算符的重载 ????- 位运算符重载 ????- 反向位运算符重载 ????- 复合赋值位相关运算符重载 ????- 一元运算符的重载 ?? |
让自定义的类生成的对象(实例)能够使用运算符进行操作。
? ?
? ?
? ?
?
? ?
? ? demo:
|
? ?
当运算符的左侧为内建类型,右侧为自定义类型时,进行算术运算符重载时会出现TypeError错误,因为无法修改内建类型的代码以实现运算符重载,此时需要使用反向运算符的重载。
反向运算符的重载相当于C++中用友元函数实现实现运算符重载。
__radd__(self, lhs) # 即reverse_add,反向加法的重载 |
? ?
反向运算符的重载方法格式:
# 类内的运算符重载 def __rxx__(self, lhs): ????语句块 |
? ?
方法名 | 运算符和表达式 | 说明 | |
| lhs + self | 加法 | |
| lhs - self | 减法 | |
| lhs * self | 乘法 | |
| lhs / self | 除法 | |
| lhs // self | 地板除 | |
| lhs % self | 取模(求余) | |
| lhs ** self | 幂运算 |
? ?
? ?
以复合赋值算术运算 x += y 为例,此运算会优先调用x.__iadd__(y)方法,如果没有__iadd__()方法时,则会将复合赋值算术运算拆解为:x = x + y 。 然后调用 x = x.__add__(y) 方法,如果再不存在 __add__() 方法则会触发 TypeError 类型的错误异常。 ? ?
|
? ?
方法名 | 运算符和表达式 | 说明 | |
| self < rhs | 小于 | |
| self <= rhs | 小于等于 | |
| self > rhs | 大于 | |
| self >= rhs | 大于等于 | |
| self == rhs | 等于 | |
| self != rhs | 不等于 |
? ?
? ?
方法名 | 运算符和表达式 | 说明 | |
| self & rhs | 位与 | |
| self | rhs | 位或 | |
| self ^ rhs | 位异或 | |
| self << rhs | left shift,左移 | |
| self >> rhs | right shift,右移 |
? ?
? ?
方法名 | 运算符和表达式 | 说明 | |
| lhs & rhs | 位与 | |
| lhs | rhs | 位或 | |
| lhs ^ rhs | 位异或 | |
| lhs << rhs | left shift,左移 | |
| lhs >>rhs | right shift,右移 |
? ?
? ?
方法名 | 运算符和表达式 | 说明 | |
| self & rhs | 位与 | |
| self | rhs | 位或 | |
| self ^ rhs | 位异或 | |
| self << rhs | left shift,左移 | |
| self >> rhs | right shift,右移 |
? ?
? ?
语法:
? ?
|
?
?
?
?
?
原文:https://www.cnblogs.com/audacious/p/12292089.html