什麼是運算符重載
讓自定義的類生成的對象(實例)能夠使用運算符進行操作!
作用:
讓自定義的實例像內建對象一樣進行運算符操作
讓程序簡潔易讀
對自定義對象將運算符賦予新的規則
算術運算符的重載:
方法名 運算符和表達式 說明
__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 地板除
__mod__(self,rhs) self % rhs 取模(求餘)
__pow__(self,rhs) self **rhs 冪運算
操作試例:
class myClass1:
def __init__(self,a,b):
self.a=a
self.b=b
def __str__(self):
return "myClass1 (%d,%d)" % (self.a,self.b)
def __add__(self, other):
return myClass1 (self.a+other.a,self.b+other.b)
s=myClass1(7,2)
s1=myClass1(2,6)
print(s+s1)
運行結果:
myClass1 (9,8)
反向運算符的重載
當運算符的左側爲內建類型時,右側爲自定義類型進行算術勻算符運算時會出現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 地板除
__rmod__(self,lhs) lhs % self 取模(求餘)
__rpow__(self,lhs) lhs ** self 冪運算
複合賦值算術運算符的重載
以複合賦值算術運算符x+=y爲例,此運算符會優先調用x.__iadd__(y)方法,如果沒有__iadd__方法時,則會將複合賦值算術運算拆解爲:x = x + y。
然後調用x = x.__add__(y)方法,如果再不存在__add__方法則會觸發TypeError類型的錯誤異常。
- 複合賦值算術運算符的重載:
方法名 運算符和表達式 說明
__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 地板除
__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 右移
- 反向位運算符重載
方法名 運算符和表達式 說明
__and__(self,lhs) lhs & rhs 位與
__or__(self,lhs) lhs | rhs 位或
__xor__(self,lhs) lhs ^ rhs 位異或
__lshift__(self,lhs) lhs <<rhs 左移
__rshift__(self,lhs) lhs >>rhs 右移
- 複合賦值位相關運算符重載
方法名 運算符和表達式 說明
__iand__(self,rhs) self & rhs 位與
__ior__(self,rhs) self | rhs 位或
__ixor__(self,rhs) self ^ rhs 位異或
__ilshift__(self,rhs) self <<rhs 左移
__irshift__(self,rhs) self >>rhs 右移
- 一元運算符的重載
方法名 運算符和表達式 說明
__neg__(self) - self 負號
__pos__(self) + self 正號
__invert__(self) ~ self 取反
- in /not in 運算符重載
格式:
def __contains__(self,e):
語句
注: in / not in 返回布爾值 True / False
當重載了__contains__後,in和not in運算符都可用
not in 運算符的返回值與 in相反
- 索引和切片運算符重載方法:
方法名 運算符和表達式 說明
__getitem__(self,i) x = self(i) 索引/切片取值
__setitem__(self,i,v) self[i] = v 索引/切片賦值
__delitem__(self,i) del self[i] del語句刪除索引/切片
作用: 讓自定義的類型的對象能夠支持索引和切片操作
切片方法類型slice構造函數
作用:
用於創建一個slice對象,此對於用於切片操作的傳值
格式:
slice(start = None,stop = None ,step = None)
slice對象的實例屬性:
start 切片的起始值,默認爲None
stop 切片的終止值,默認爲None
step 切片的步長,默認爲None