解決Python運(yùn)算符重載的問題
python進(jìn)行有理數(shù)運(yùn)算時(shí),希望用運(yùn)算符(+ - * /)描述計(jì)算過程。
只是用來寫出更加自然的計(jì)算表達(dá)式。為此,python為所有算數(shù)運(yùn)算符規(guī)定了特殊方法名。其中所有特殊的名字都以兩個(gè)下劃線開始,并以兩個(gè)下劃線結(jié)束,即:
當(dāng)在Python中輸入“a+b”時(shí),程序發(fā)現(xiàn)使用了“+”運(yùn)算符,因此就會(huì)調(diào)用“__add__”方法。
此時(shí),若對自定義類中進(jìn)行運(yùn)算符的重載,則可以實(shí)現(xiàn)對類的打印、有理數(shù)運(yùn)算等等。
其中,一個(gè)問題應(yīng)當(dāng)注意,如以下代碼
class Size: def __init__(self, value): self._value = value def value(self): return self._value def __lt__(self, another): #由于 < 是一個(gè)二元運(yùn)算符,因此會(huì)有 anothoer這一項(xiàng)的存在 cc = self.value() > another.value() return self.value() > another.value() # def __gt__(self, another): # gg = self._value < another.value() # return self._value < another.value() def __eq__(self, another): return self.value() == another.value() def __str__(self): return str(self.value()) a=Size(3) b=Size(2) print(a,b,a>b)
進(jìn)行調(diào)試時(shí),盡管沒有對“>”運(yùn)算符(對應(yīng)的魔法方法是“__gt”)進(jìn)行重載,但是運(yùn)算到
print(a,b,a>b)
時(shí),程序并不會(huì)報(bào)錯(cuò),且仍然會(huì)調(diào)用重載后的"__lt__"。我個(gè)人理解是因?yàn)镻ython自動(dòng)將“a>b”看成是“b<a”。若此時(shí)重載了“__gt__”,則程序不會(huì)去調(diào)用“__lt__”了。
補(bǔ)充:python中的運(yùn)算符與表達(dá)式
Python是面向?qū)ο蟮木幊陶Z言,在Python中一切都是對象。對象由數(shù)據(jù)和行為兩部分組成,而行為主要通過方法來實(shí)現(xiàn),通過一些特殊方法的重寫,可以實(shí)現(xiàn)運(yùn)算符重載。
運(yùn)算符也是表現(xiàn)對象行為的一種形式,不同類的對象支持的運(yùn)算符有所不同,同一種運(yùn)算符作用于不同的對象時(shí)也可能會(huì)表現(xiàn)出不同的行為,這正是“多態(tài)”的體現(xiàn)。
在Python中,單個(gè)常量或變量可以看作最簡單的表達(dá)式,使用除賦值運(yùn)算符之外的其他任意運(yùn)算符和函數(shù)調(diào)用連接的式子也屬于表達(dá)式
運(yùn)算符優(yōu)先級遵循的規(guī)則為:算術(shù)運(yùn)算符優(yōu)先級最高,其次是位運(yùn)算符、成員測試運(yùn)算符、關(guān)系運(yùn)算符、邏輯運(yùn)算符等,算術(shù)運(yùn)算符遵循“先乘除,后加減”的基本運(yùn)算原則。
雖然Python運(yùn)算符有一套嚴(yán)格的優(yōu)先級規(guī)則,但是強(qiáng)烈建議在編寫復(fù)雜表達(dá)式時(shí)使用圓括號(hào)來明確說明其中的邏輯來提高代碼可讀性
算數(shù)運(yùn)算符
(1)+運(yùn)算符除了用于算術(shù)加法以外,還可以用于列表、元組、字符串的連接,但不支持不同類型的對象之間相加或連接。
(2)*運(yùn)算符除了表示算術(shù)乘法,還可用于列表、元組、字符串這幾個(gè)序列類型與整數(shù)的乘法,表示序列元素的重復(fù),生成新的序列對象。字典和集合不支持與整數(shù)的相乘,因?yàn)槠渲械脑厥遣辉试S重復(fù)的。
(3)運(yùn)算符/和//在Python中分別表示算術(shù)除法和算術(shù)求整商(floor division)
(4)%運(yùn)算符可以用于整數(shù)或?qū)崝?shù)的求余數(shù)運(yùn)算,還可以用于字符串格式化,但是這種用法并不推薦。
(5)**運(yùn)算符表示冪乘
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
快速解決pymongo操作mongodb的時(shí)區(qū)問題
這篇文章主要介紹了快速解決pymongo操作mongodb的時(shí)區(qū)問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-12-12100?個(gè)?Python?小例子(練習(xí)題四)
這篇文章主要給大家分享100?個(gè)?Python?小例子,前文分享了一二三,本文的四十最后一篇了,這篇就把100道python小練習(xí)全分享完了,感興趣的小伙伴也可以去練習(xí)前幾期內(nèi)容,洗碗給這幾篇文章給你的學(xué)習(xí)帶來幫助2022-01-01python實(shí)現(xiàn)WebP格式轉(zhuǎn)成JPG、PNG和JPEG的方法
平時(shí)在網(wǎng)上搜索圖片,另存為時(shí)常常遇到 WebP 格式,而非常見的 JPG、PNG、JPEG 格式,所以以此文記錄一下WebP的讀取和轉(zhuǎn)換方法,希望對大家有所幫助,需要的朋友可以參考下2024-06-06Python的Django框架中自定義模版標(biāo)簽的示例
這篇文章主要介紹了Python的Django框架中自定義模版標(biāo)簽的示例,標(biāo)簽的用處比過濾器更多,需要的朋友可以參考下2015-07-07在Python的Django框架中調(diào)用方法和處理無效變量
這篇文章主要介紹了在Python的Django框架中調(diào)用方法和處理無效變量的方法,是Django編程中的基礎(chǔ)操作,需要的朋友可以參考下2015-07-07