什么是运算符重载:
让自定义的类生成的对象(实例)能够使用运算符进行操作.
算数运算符重载:
方法名 运算符和表达式 说明
__add__(self,other) self + other 加法
__sub__(self,other) self - other 减法
__mul__(self,other) self * other 乘法
__truediv__(self,other) self / other 除法
__floordiv__(self,other) self // other 地板除
__mod__(self,other) self % other 取模(求余)
__pow__(self,other) self **other 幂运算
class Person:
def __init__(self,num):
self.num = num
def __add__(self, other):
return Person(self.num + other.num)
def __sub__(self, other):
return Person(self.num - other.num)
def __str__(self):
return "num = "+str(self.num)
p1 = Person(12)
p2 = Person(13)
print(p1+p2)
print(p1-p2)
F:\学习代码\Python代码\venv\Scripts\python.exe F:/学习代码/Python代码/day5/运算符重载2.py
num = 25
num = -1
Process finished with exit code 0
反向算数运算符重载:
方法名 运算符和表达式 说明
__radd__(self,other) other + self 加法
__rsub__(self,other) other - self 减法
__rmul__(self,other) other * self 乘法
__rtruediv__(self,other) other / self 除法
__rfloordiv__(self,other) other // self 地板除
__rmod__(self,other) other % self 取模(求余)
__rpow__(self,other) other ** self 幂运算
class Person:
def __init__(self,num):
self.num = num
def __repr__(self):
return "num = " + repr(self.num)
def __add__(self, other):
print("__add__")
return Person(self.num + other)
def __radd__(self, other):
print("__radd__")
return Person(self.num + other)
def __sub__(self, other):
print("__sub__")
return Person(self.num - other)
def __rsub__(self, other):
print("__rsub__")
return Person(self.num - other)
p1 = Person(10)
p2 = Person(20)
p3 = 20 - p1
print(p3)
p4 = p1 - 20
print(p4)
p5 = 10 + p2
print(p5)
p6 = p2 + 10
print(p6)
F:\学习代码\Python代码\venv\Scripts\python.exe F:/学习代码/Python代码/day5/反向运算符重载.py
__rsub__
num = -10
__sub__
num = -10
__radd__
num = 30
__add__
num = 30
Process finished with exit code 0
复合赋值算术运算符的重载:
方法名 运算符和表达式 说明
__iadd__(self,other) self += other 加法
__isub__(self,other) self -= other 减法
__imul__(self,other) self *= other 乘法
__itruediv__(self,other) self /= other 除法
__ifloordiv__(self,other) self //=other 地板除
__imod__(self,other) self %= other 取模(求余)
__ipow__(self,other) self **=other 幂运算
class Person:
def __init__(self,num):
self.num = num
def __repr__(self):
return "num = "+ repr(self.num)
def __iadd__(self, other):
print("__iadd__")
self.num += other.num
return self
def __add__(self, other):
print("__add__")
return Person(self.num + other)
if __name__ == '__main__':
p1 = Person(10)
p2 = Person(20)
p3 = p1 + 10
print(p3)
p2 += p1
print(p2)
F:\学习代码\Python代码\venv\Scripts\python.exe F:/学习代码/Python代码/day5/复合算数运算符重载.py
__add__
num = 20
__iadd__
num = 30
Process finished with exit code 0
比较算数运算符:
方法名 运算符和表达式 说明
__lt__(self, other) self < other 小于
__le__(self, other) self <= other 小于等于
__gt__(self, other) self > other 大于
__ge__(self, other) self >= other 大于等于
__eq__(self, other) self == other 等于
__ne__(self, other) self != other 不等于
位运算符重载
方法名 运算符和表达式 说明
__invert__(self) ~ self 取反(一元运算符)
__and__(self, other) self & other 位与
__or__(self, other) self | other 位或
__xor__(self, other) self ^ other 位异或
__lshift__(self, other) self << other 左移
__rshift__(self, other) self >> other 右移
反向位运算符重载
方法名 运算符和表达式 说明
__rand__(self, other) other& self 位与
__ror__(self, other) other| self 位或
__rxor__(self, other) other^ self 位异或
__rlshift__(self, other) other<< self 左移
__rrshift__(self, other) other>> self 右移
复合赋值位运算符重载
方法名 运算符和表达式 说明
__iand__(self, other) self &= other 位与
__ior__(self, other) self |= other 位或
__ixor__(self, other) self ^= other 位异或
__ilshift__(self, other) self <<= other 左移
__irshift__(self, other) self >>= other 右移