Python3 運算符重載-隨記

什麼是運算符重載

    讓自定義的類生成的對象(實例)能夠使用運算符進行操作!

作用:
    讓自定義的實例像內建對象一樣進行運算符操作
    讓程序簡潔易讀
    對自定義對象將運算符賦予新的規則

算術運算符的重載:

    方法名                          運算符和表達式       說明
    __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

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章