網站首頁 編程語言 正文
運算符重載意味著賦予超出其預定義的操作含義的擴展含義。例如運算符 + 用于添加兩個整數以及連接兩個字符串和合并兩個列表。這是可以實現的,因為 '+' 運算符被 int 類和 str 類重載。您可能已經注意到,相同的內置運算符或函數對不同類的對象顯示不同的行為,這稱為運算符重載。
# Python 程序顯示 + 運算符用于不同目的。
print(1 + 2)
# 連接兩個字符串
print("Geeks"+"For")
# Product two numbers
print(3 * 4)
# 重復字符串
print("Geeks"*4)
輸出
3
GeeksFor
12
GeeksGeeksGeeksGeeks
如何重載Python中的運算符
考慮到我們有兩個對象,它們是一個類的物理表示(用戶定義的數據類型),我們必須使用二進制“+”運算符添加兩個對象,它會引發錯誤,因為編譯器不知道如何添加兩個對象.?因此,我們為運算符定義了一個方法,該過程稱為運算符重載。我們可以重載所有現有的運算符,但不能創建新的運算符。為了執行運算符重載,Python 提供了一些特殊函數或魔術函數,當它與特定運算符關聯時會自動調用這些函數。例如,當我們使用 + 運算符時,會自動調用魔術方法 add,其中定義了+ 運算符的操作。
在 Python 中重載二進制 + 運算符: ?
當我們在用戶定義的數據類型上使用運算符時,會自動調用與該運算符關聯的特殊函數或魔術函數。改變運算符的行為就像改變方法或函數的行為一樣簡單。您在類中定義方法,運算符根據方法中定義的行為工作。當我們使用 + 運算符時,會自動調用魔術方法 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:
# 使用二元 + 運算符重載執行兩個復數相加的 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 魔術方法或特殊函數
二元運算符
運算符 | 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(自我) |
~ | 反轉(自我) |
注意: 不能更改運算符的運算符數量。例如。您不能將一元運算符重載為二元運算符。以下代碼將引發語法錯誤。
原文鏈接:https://juejin.cn/post/7141949315248816159
相關推薦
- 2022-08-31 Centos安裝python3與scapy模塊的問題及解決方法_python
- 2022-12-05 Android不同版本兼容性適配方法教程_Android
- 2022-09-13 EvenLoop模型在iOS的RunLoop應用示例_Swift
- 2023-01-10 Vmware虛擬機設置主機端口映射方式_VMware
- 2022-05-20 springboot-mybatis實現增刪改查
- 2022-08-18 詳解python?一維、二維列表的初始化問題_python
- 2022-10-25 laravel-admin 安裝報錯 1071 Specified key was too long
- 2022-12-26 python?QT界面關閉線程池的線程跟隨退出完美解決方案_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支