您好,登錄后才能下訂單哦!
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 地板除
__mod__(self,rhs) self % rhs 取模(求余)
__pow__(self,rhs) self **rhs 冪運算
class Achievement(object): def __init__(self,achievement): self.achievement=achievement def __pow__(self,other): return self.achievement**other.achievement achievement01=Achievement(20) achievement02=Achievement(20) print(pow(achievement01,achievement02))
打印輸出的便是兩個成績的乘方104857600000000000000000000,其他運算符重載的基本步驟和__pow__大致相同。
python 3 的版本中已經沒有cmp函數,被operator模塊代替,在交互模式下使用時,需要導入模塊。
import operator operator.le(a, b) operator.eq(a, b) operator.ne(a, b) operator.ge(a, b) operator.gt(a, b) operator.__lt__(a, b) operator.__le__(a, b) operator.__eq__(a, b) operator.__ne__(a, b) operator.__ge__(a, b) operator.__gt__(a, b)
這幾個函數就是用來替換之前的cmp的,先簡單說下這幾個函數的意思吧
lt(a,b) 相當于 a<b 數字或字母(ASCII)比大小
le(a,b)相當于a<=b
eq(a,b)相當于a==b 字母完全一樣,返回True,
ne(a,b)相當于a!=b
gt(a,b)相當于a>b
ge(a,b)相當于 a>=b
函數的返回值是布爾類型
但是我們可以用運算符重載來復現cmp的功能
例:
class Achievement(object): def __init__(self,achievement01,achievement02): self.achievement01=achievement01 self.achievement02=achievement02 def cmp(self): if self.achievement01>self.achievement02: print(self.achievement01,">",self.achievement02) return 1 elif self.achievement01<self.achievement02: print(self.achievement01,"<",self.achievement02) return -1 elif self.achievement01==self.achievement02: print(self.achievement01,"=",self.achievement02) return 0
main.py:
from demo01 import * def main(): Achievement01=Achievement(100,50) Achievement01.cmp() if __name__=="__main__": main()
上述例子中我在成績類中寫了一個cmp函數,因為python3中已經棄用了cmp函數,所以我們完全可以不按照標準的運算符重載寫成__cmp__,直接函數名cmp即可,這樣我們就又可以使用cmp函數了。
在主函數中傳入成績100和50,調用cmp函數,輸出結果為100>50
當運算符的左側為內建類型時,右側為自定義類型進行算術勻算符運算時會出現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 冪運算
示例:
class Mylist: def __init__(self, iterable=()): self.data = list(iterable) def __repr__(self): return 'Mylist(%s)' % self.data def __add__(self, lst): print('__add__被調用') return Mylist(self.data + lst.data) def __mul__(self, rhs): # rhs為int類型,不能用rhs.data print('__mul__被調用') return Mylist(self.data * rhs) def __rmul__(self, lhs): print("__rmul__被調用") return Mylist(self.data * lhs) L1 = Mylist([1, 2, 3]) L2 = Mylist([4, 5, 6]) L3 = 3 * L1 print(L3) L1 += L2 print(L1) L2 *= 3 print(L2)
看完上述內容,你們掌握Python運算符重載的實例代碼怎么編寫的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。