網(wǎng)站首頁 編程語言 正文
運(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è)方法,該過程稱為運(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)算符的操作。通過改變這個(gè)魔法方法的代碼,我們可以給 + 運(yùn)算符賦予額外的意義。?
代碼 1:
# Python 程序說明如何重載二元 + 運(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ā)語法錯(cuò)誤。
原文鏈接:https://juejin.cn/post/7141949315248816159
相關(guān)推薦
- 2021-12-06 Android?CameraX?打開攝像頭預(yù)覽功能_Android
- 2022-03-23 Unity3d實(shí)現(xiàn)無限循環(huán)滾動(dòng)背景_C#教程
- 2023-03-22 python實(shí)現(xiàn)四舍五入方式_python
- 2022-04-18 react中在元素中插入多個(gè)類名, 多個(gè)狀態(tài)之間的類名切換等
- 2023-06-21 python相對(duì)包導(dǎo)入報(bào)“Attempted?relative?import?in?non-pack
- 2023-01-23 redis實(shí)現(xiàn)多級(jí)緩存同步方案詳解_Redis
- 2022-09-27 Python?Matplotlib繪制扇形圖標(biāo)簽重疊問題解決過程_python
- 2023-03-13 Python實(shí)現(xiàn)柵欄密碼的加密解密方法詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡(jiǎn)單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支