什么是運(yùn)算符重載,Python可重載運(yùn)算符有哪些?

在 Python 內(nèi)部,每種序列類(lèi)型都是 Python 的一個(gè)類(lèi),例如列表是 list 類(lèi),字典是 dict 類(lèi)等,這些序列類(lèi)的內(nèi)部使用了一個(gè)叫作“重載運(yùn)算符”的技術(shù)來(lái)實(shí)現(xiàn)不同運(yùn)算符所對(duì)應(yīng)的操作。

所謂重載運(yùn)算符,指的是在類(lèi)中定義并實(shí)現(xiàn)一個(gè)與運(yùn)算符對(duì)應(yīng)的處理方法,這樣當(dāng)類(lèi)對(duì)象在進(jìn)行運(yùn)算符操作時(shí),系統(tǒng)就會(huì)調(diào)用類(lèi)中相應(yīng)的方法來(lái)處理。

這里給大家舉一個(gè)與重載運(yùn)算符相關(guān)的實(shí)例:

<pre class="python sh_python snippet-formatted sh_sourceCode" style="margin: 0px; display: block; padding: 0px; font-size: 14px; line-height: 1.6em; color: rgb(102, 102, 102); white-space: pre-wrap; overflow-wrap: break-word; background: none; border: none; border-radius: 0px;">

1.  class MyClass: #自定義一個(gè)類(lèi)
2.  def __init__(self, name , age): #定義該類(lèi)的初始化函數(shù)
3.  self.name = name #將傳入的參數(shù)值賦值給成員交量
4.  self.age = age
5.  def __str__(self): #用于將值轉(zhuǎn)化為字符串形式,等同于 str(obj)
6.  return "name:"+self.name+";age:"+str(self.age)

8.  __repr__ = __str__ #轉(zhuǎn)化為供解釋器讀取的形式

10.  def __lt__(self, record): #重載 self<record 運(yùn)算符
11.  if self.age < record.age:
12.  return True
13.  else:
14.  return False

16.  def __add__(self, record): #重載 + 號(hào)運(yùn)算符
17.  return MyClass(self.name, self.age+record.age)

19.  myc = MyClass("Anna", 42) #實(shí)例化一個(gè)對(duì)象 Anna,并為其初始化
20.  mycl = MyClass("Gary", 23) #實(shí)例化一個(gè)對(duì)象 Gary,并為其初始化
21.  print(repr(myc)) #格式化對(duì)象 myc,
22.  print(myc) #解釋器讀取對(duì)象 myc,調(diào)用 repr
23.  print (str (myc)) #格式化對(duì)象 myc ,輸出"name:Anna;age:42"
24.  print(myc < mycl) #比較 myc<mycl 的結(jié)果,輸出 False
25.  print (myc+mycl) #進(jìn)行兩個(gè) MyClass 對(duì)象的相加運(yùn)算,輸出 "name:Anna;age:65"

</pre>

輸出結(jié)果為:

name:Anna;age:42
name:Anna;age:42
name:Anna;age:42
False
name:Anna;age:65

這個(gè)例子中,MyClass 類(lèi)中重載了 repr、str、<、+ 運(yùn)算符,并用 MyClass 實(shí)例化了兩個(gè)對(duì)象 myc 和 mycl。

通過(guò)將 myc 進(jìn)行 repr、str 運(yùn)算,從輸出結(jié)果中可以看到,程序調(diào)用了重載的操作符方法 reprstr。而令 myc 和 mycl 進(jìn)行 < 號(hào)的比較運(yùn)算以及加法運(yùn)算,從輸出結(jié)果中可以看出,程序調(diào)用了重載 < 號(hào)的方法 ltadd 方法。

那么,Python 類(lèi)支持對(duì)哪些方法進(jìn)行重載呢?這個(gè)給大家提供一個(gè)表格(表 1),列出了 Python 中常用的可重載的運(yùn)算符,以及各自的含義。


image.png
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容