Python入門教程之運算符重載詳解
運算符重載意味著賦予超出其預定義的操作含義的擴展含義。例如運算符 + 用于添加兩個整數(shù)以及連接兩個字符串和合并兩個列表。這是可以實現(xiàn)的,因為 '+' 運算符被 int 類和 str 類重載。您可能已經(jīng)注意到,相同的內(nèi)置運算符或函數(shù)對不同類的對象顯示不同的行為,這稱為運算符重載。
# Python 程序顯示 + 運算符用于不同目的。
print(1 + 2)
# 連接兩個字符串
print("Geeks"+"For")
# Product two numbers
print(3 * 4)
# 重復字符串
print("Geeks"*4)輸出
3
GeeksFor
12
GeeksGeeksGeeksGeeks
如何重載Python中的運算符
考慮到我們有兩個對象,它們是一個類的物理表示(用戶定義的數(shù)據(jù)類型),我們必須使用二進制“+”運算符添加兩個對象,它會引發(fā)錯誤,因為編譯器不知道如何添加兩個對象. 因此,我們?yōu)檫\算符定義了一個方法,該過程稱為運算符重載。我們可以重載所有現(xiàn)有的運算符,但不能創(chuàng)建新的運算符。為了執(zhí)行運算符重載,Python 提供了一些特殊函數(shù)或魔術(shù)函數(shù),當它與特定運算符關(guān)聯(lián)時會自動調(diào)用這些函數(shù)。例如,當我們使用 + 運算符時,會自動調(diào)用魔術(shù)方法 add,其中定義了+ 運算符的操作。
在 Python 中重載二進制 + 運算符:
當我們在用戶定義的數(shù)據(jù)類型上使用運算符時,會自動調(diào)用與該運算符關(guān)聯(lián)的特殊函數(shù)或魔術(shù)函數(shù)。改變運算符的行為就像改變方法或函數(shù)的行為一樣簡單。您在類中定義方法,運算符根據(jù)方法中定義的行為工作。當我們使用 + 運算符時,會自動調(diào)用魔術(shù)方法 add ,其中定義了 + 運算符的操作。通過改變這個魔法方法的代碼,我們可以給 + 運算符賦予額外的意義。
代碼 1:
# Python 程序說明如何重載二元 + 運算符
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:
# 使用二元 + 運算符重載執(zhí)行兩個復數(shù)相加的 Python 程序。 class complex: def __init__(self, a, b): self.a = a self.b = b # 添加兩個對象 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中重載比較運算符
# Python程序重載比較運算符
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
重載相等和小于運算符
# Python程序重載相等和小于運算符 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
用于運算符重載的 Python 魔術(shù)方法或特殊函數(shù)
二元運算符
| 運算符 | Magic Method | |
|---|---|---|
| + | add(自己,其他) | |
| – | sub(自己,其他) | |
| ***** | mul(自己,其他) | |
| / | truediv(自我,其他) | |
| // | floordiv(自我,其他) | |
| % | mod(自我,其他) | |
| ****** | pow(自己,其他) | |
| >> | rshift(自我,其他) | |
| << | lshift(自我,其他) | |
| & | 和(自己,其他) | |
| 或(自己,其他) | ||
| xor(自我,其他) |
比較運算符
| 運算符 | Magic Method |
|---|---|
| < | lt(自己,其他) |
| > | gt(自己,其他) |
| <= | le(自己,其他) |
| >= | ge(自己,其他) |
| == | eq(自我,其他) |
| != | ne(自己,其他) |
賦值運算符
| 運算符 | Magic Method | |
|---|---|---|
| -= | isub(自我,其他) | |
| += | iadd(自己,其他) | |
| *= | imul(自我,其他) | |
| /= | idiv(自我,其他) | |
| //= | ifloordiv(自我,其他) | |
| %= | imod(自己,其他) | |
| **= | ipow(自我,其他) | |
| >>= | irshift(自我,其他) | |
| <<= | ilshift(自己,其他) | |
| &= | iand(自己,其他) | |
| ** =** | ior(自己,其他) | |
| ^= | ixor(自我,其他) |
一元運算符
| 運算符 | Magic Method |
|---|---|
| – | neg(自我) |
| + | pos(自我) |
| ~ | 反轉(zhuǎn)(自我) |
注意: 不能更改運算符的運算符數(shù)量。例如。您不能將一元運算符重載為二元運算符。以下代碼將引發(fā)語法錯誤。
到此這篇關(guān)于Python入門教程之運算符重載詳解的文章就介紹到這了,更多相關(guān)Python運算符重載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python數(shù)據(jù)結(jié)構(gòu)之棧、隊列及雙端隊列
在上一章的學習中,我們主要學習了怎么去衡量一個算法的好壞,比較常見的方式是使用大O記法,就是所謂的時間復雜度,這一章節(jié)我來學習基本的數(shù)據(jù)結(jié)構(gòu),如棧、隊列和雙端隊列等等。感興趣的小伙伴可以參考一下2021-12-12
基于python3 pyQt5 QtDesignner實現(xiàn)窗口化猜數(shù)字游戲功能
這篇文章主要介紹了基于python3 pyQt5 QtDesignner實現(xiàn)窗口化猜數(shù)字游戲功能,本文通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-07-07

