在 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)用了重載的操作符方法 repr 和 str。而令 myc 和 mycl 進(jìn)行 < 號(hào)的比較運(yùn)算以及加法運(yùn)算,從輸出結(jié)果中可以看出,程序調(diào)用了重載 < 號(hào)的方法 lt 和 add 方法。
那么,Python 類(lèi)支持對(duì)哪些方法進(jìn)行重載呢?這個(gè)給大家提供一個(gè)表格(表 1),列出了 Python 中常用的可重載的運(yùn)算符,以及各自的含義。
