91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python運算符重載的實例代碼怎么編寫

發布時間:2022-01-10 00:38:01 來源:億速云 閱讀:153 作者:柒染 欄目:開發技術

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         冪運算

以__pow__為例

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運算符重載的實例代碼怎么編寫的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

泸水县| 乐山市| 阿瓦提县| 汉寿县| 琼海市| 安岳县| 广安市| 中江县| 瑞金市| 南皮县| 开江县| 扎兰屯市| 牟定县| 安化县| 噶尔县| 寿阳县| 津南区| 辽中县| 新乡县| 两当县| 天津市| 阳春市| 鄯善县| 买车| 绥芬河市| 米林县| 龙州县| 五指山市| 兴文县| 洛川县| 西畴县| 马尔康县| 巴东县| 九江县| 广昌县| 太谷县| 黔南| 文昌市| 巨鹿县| 南华县| 晋州市|