Python入門教程之運(yùn)算符重載詳解
運(yùn)算符重載意味著賦予超出其預(yù)定義的操作含義的擴(kuò)展含義。例如運(yùn)算符 + 用于添加兩個(gè)整數(shù)以及連接兩個(gè)字符串和合并兩個(gè)列表。這是可以實(shí)現(xiàn)的,因?yàn)?'+' 運(yùn)算符被 int 類和 str 類重載。您可能已經(jīng)注意到,相同的內(nèi)置運(yùn)算符或函數(shù)對(duì)不同類的對(duì)象顯示不同的行為,這稱為運(yùn)算符重載。
# Python 程序顯示 + 運(yùn)算符用于不同目的。 print(1 + 2) # 連接兩個(gè)字符串 print("Geeks"+"For") # Product two numbers print(3 * 4) # 重復(fù)字符串 print("Geeks"*4)
輸出
3
GeeksFor
12
GeeksGeeksGeeksGeeks
如何重載Python中的運(yùn)算符
考慮到我們有兩個(gè)對(duì)象,它們是一個(gè)類的物理表示(用戶定義的數(shù)據(jù)類型),我們必須使用二進(jìn)制“+”運(yùn)算符添加兩個(gè)對(duì)象,它會(huì)引發(fā)錯(cuò)誤,因?yàn)榫幾g器不知道如何添加兩個(gè)對(duì)象. 因此,我們?yōu)檫\(yùn)算符定義了一個(gè)方法,該過(guò)程稱為運(yùn)算符重載。我們可以重載所有現(xiàn)有的運(yùn)算符,但不能創(chuàng)建新的運(yùn)算符。為了執(zhí)行運(yùn)算符重載,Python 提供了一些特殊函數(shù)或魔術(shù)函數(shù),當(dāng)它與特定運(yùn)算符關(guān)聯(lián)時(shí)會(huì)自動(dòng)調(diào)用這些函數(shù)。例如,當(dāng)我們使用 + 運(yùn)算符時(shí),會(huì)自動(dòng)調(diào)用魔術(shù)方法 add,其中定義了+ 運(yùn)算符的操作。
在 Python 中重載二進(jìn)制 + 運(yùn)算符:
當(dāng)我們?cè)谟脩舳x的數(shù)據(jù)類型上使用運(yùn)算符時(shí),會(huì)自動(dòng)調(diào)用與該運(yùn)算符關(guān)聯(lián)的特殊函數(shù)或魔術(shù)函數(shù)。改變運(yùn)算符的行為就像改變方法或函數(shù)的行為一樣簡(jiǎn)單。您在類中定義方法,運(yùn)算符根據(jù)方法中定義的行為工作。當(dāng)我們使用 + 運(yùn)算符時(shí),會(huì)自動(dòng)調(diào)用魔術(shù)方法 add ,其中定義了 + 運(yùn)算符的操作。通過(guò)改變這個(gè)魔法方法的代碼,我們可以給 + 運(yùn)算符賦予額外的意義。
代碼 1:
# Python 程序說(shuō)明如何重載二元 + 運(yùn)算符 class A: def __init__(self, a): self.a = a # adding two objects def __add__(self, o): return self.a + o.a ob1 = A(1) ob2 = A(2) ob3 = A("Geeks") ob4 = A("For") print(ob1 + ob2) print(ob3 + ob4)
輸出
3
GeeksFor
代碼 2:
# 使用二元 + 運(yùn)算符重載執(zhí)行兩個(gè)復(fù)數(shù)相加的 Python 程序。 class complex: def __init__(self, a, b): self.a = a self.b = b # 添加兩個(gè)對(duì)象 def __add__(self, other): return self.a + other.a, self.b + other.b Ob1 = complex(1, 2) Ob2 = complex(2, 3) Ob3 = Ob1 + Ob2 print(Ob3)
輸出
(3, 5)
在 Python中重載比較運(yùn)算符
# Python程序重載比較運(yùn)算符 class A: def __init__(self, a): self.a = a def __gt__(self, other): if(self.a>other.a): return True else: return False ob1 = A(2) ob2 = A(3) if(ob1>ob2): print("ob1 is greater than ob2") else: print("ob2 is greater than ob1")
輸出 :
ob2 is greater than ob1
重載相等和小于運(yùn)算符
# Python程序重載相等和小于運(yùn)算符 class A: def __init__(self, a): self.a = a def __lt__(self, other): if(self.a<other.a): return "ob1 is lessthan ob2" else: return "ob2 is less than ob1" def __eq__(self, other): if(self.a == other.a): return "Both are equal" else: return "Not equal" ob1 = A(2) ob2 = A(3) print(ob1 < ob2) ob3 = A(4) ob4 = A(4) print(ob1 == ob2)
輸出 :
ob1 is lessthan ob2
Not equal
用于運(yùn)算符重載的 Python 魔術(shù)方法或特殊函數(shù)
二元運(yùn)算符
運(yùn)算符 | Magic Method | |
---|---|---|
+ | add(自己,其他) | |
– | sub(自己,其他) | |
***** | mul(自己,其他) | |
/ | truediv(自我,其他) | |
// | floordiv(自我,其他) | |
% | mod(自我,其他) | |
****** | pow(自己,其他) | |
>> | rshift(自我,其他) | |
<< | lshift(自我,其他) | |
& | 和(自己,其他) | |
或(自己,其他) | ||
xor(自我,其他) |
比較運(yùn)算符
運(yùn)算符 | Magic Method |
---|---|
< | lt(自己,其他) |
> | gt(自己,其他) |
<= | le(自己,其他) |
>= | ge(自己,其他) |
== | eq(自我,其他) |
!= | ne(自己,其他) |
賦值運(yùn)算符
運(yùn)算符 | Magic Method | |
---|---|---|
-= | isub(自我,其他) | |
+= | iadd(自己,其他) | |
*= | imul(自我,其他) | |
/= | idiv(自我,其他) | |
//= | ifloordiv(自我,其他) | |
%= | imod(自己,其他) | |
**= | ipow(自我,其他) | |
>>= | irshift(自我,其他) | |
<<= | ilshift(自己,其他) | |
&= | iand(自己,其他) | |
** =** | ior(自己,其他) | |
^= | ixor(自我,其他) |
一元運(yùn)算符
運(yùn)算符 | Magic Method |
---|---|
– | neg(自我) |
+ | pos(自我) |
~ | 反轉(zhuǎn)(自我) |
注意: 不能更改運(yùn)算符的運(yùn)算符數(shù)量。例如。您不能將一元運(yùn)算符重載為二元運(yùn)算符。以下代碼將引發(fā)語(yǔ)法錯(cuò)誤。
到此這篇關(guān)于Python入門教程之運(yùn)算符重載詳解的文章就介紹到這了,更多相關(guān)Python運(yùn)算符重載內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python爬蟲進(jìn)階之爬取某視頻并下載的實(shí)現(xiàn)
這篇文章主要介紹了Python爬蟲進(jìn)階之爬取某視頻并下載的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12pycharm設(shè)置虛擬環(huán)境與更換鏡像教程
這篇文章主要介紹了pycharm設(shè)置虛擬環(huán)境與更換鏡像教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-09-09python 實(shí)現(xiàn)在一張圖中繪制一個(gè)小的子圖方法
今天小編就為大家分享一篇python 實(shí)現(xiàn)在一張圖中繪制一個(gè)小的子圖方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2019-07-07Python使用Selenium實(shí)現(xiàn)淘寶搶單的流程分析
這篇文章主要介紹了Python使用Selenium實(shí)現(xiàn)淘寶搶單的流程分析,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-06-06python庫(kù)skimage給灰度圖像染色的方法示例
這篇文章主要介紹了python庫(kù)skimage給灰度圖像染色的方法示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04python使用super()出現(xiàn)錯(cuò)誤解決辦法
這篇文章主要介紹了python使用super()出現(xiàn)錯(cuò)誤解決辦法的相關(guān)資料,對(duì)于TypeError: must be type, not classobj的錯(cuò)誤進(jìn)行處理,需要的朋友可以參考下2017-08-08Python 給屏幕打印信息加上顏色的實(shí)現(xiàn)方法
這篇文章主要介紹了Python 給屏幕打印信息加上顏色的實(shí)現(xiàn)方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-04-04