您好,登錄后才能下訂單哦!
這篇文章主要講解了“什么是Python運算符重載 ”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“什么是Python運算符重載 ”吧!
Python運算符用于內置類。但是相同的運算符對不同的類型有不同的行為。例如,+運算符將對兩個數字執行算術加法、合并兩個列表并連接兩個字符串。
Python中的這一功能允許同一運算符根據上下文具有不同的含義,稱為運算符重載。
那么,當將它們與用戶定義類的對象一起使用時會發生什么呢?
示例 :下面的類,它試圖在二維坐標系中模擬一個點。
class Point: def __init__(self, x = 0, y = 0): self.x = x self.y = y
現在,運行代碼并嘗試在Python shell中添加兩個點。
p1 = Point(2,3) p2 = Point(-1,2) print(p1 + p2)
代碼:
這是很多錯誤。由于Python不知道如何將兩個Point對象加在一起而引發TypeError。
但是,可以通過運算符重載向Python教授這一點。但是首先,讓對特殊函數有所了解。
1. 什么是特殊模式?
以雙下劃線開頭的類函數在Python中稱為特殊函數。這是因為,它們不是普通的函數。上面定義的init__()函數就是其中之一。每次創建該類的新對象時都會調用它。
2. 案例
使用特殊函數,可以使的類與內置函數兼容。
例 :
p1 = Point(2,3) print(p1)
打印輸出沒有達到預想的效果。
但是,如果在類中定義str()方法,可以控制它的打印輸出方式。把這個加到的類中。
示例
class Point: def __init__(self, x = 0, y = 0): self.x = x self.y = y def __str__(self): return "({0},{1})".format(self.x,self.y)
現在,讓print()再次嘗試該函數。
p1 = Point(3,7) print(p1)
事實證明這樣更好,當使用內置函數str()或時,將調用相同的方法format()。
p1 = Point(2, 3) print(str(p1)) print(format(p1))
因此,當您執行str(p1)或format(p1)時,Python在內部執行p1.str()。因此得名,特殊函數。下面繼續回到操作符重載。
要重載+符號,將需要在類中實現add()函數。擁有權利的同時也被賦予了重大的責任。可以在此函數內做任何喜歡的事情。但是返回坐標和的Point對象是明智的。
示例
class Point: def __init__(self, x = 0, y = 0): self.x = x self.y = y def __str__(self): return "({0},{1})".format(self.x,self.y) def __add__(self,other): x = self.x + other.x y = self.y + other.y return Point(x,y)
測試一下:
p1 = Point(2,3) p2 = Point(-1,2) print(p1 + p2)
實際上發生的是,當您執行p1 + p2時,Python會調用p1 .__ add (p2),也就是Point . add __(p1,p2)。同樣,也可以重載其他運算符。
Python不限制運算符重載為算術運算符。也可以重載比較運算符。
假設,想在Point類中實現小于運算符(<) ,讓從原點比較這些點的大小,并為此目的返回結果。可以如下實現。
示例
class Point: def __init__(self, x = 0, y = 0): self.x = x self.y = y def __str__(self): return "({0},{1})".format(self.x,self.y) def __lt__(self,other): self_mag = (self.x ** 2) + (self.y ** 2) other_mag = (other.x ** 2) + (other.y ** 2) return self_mag < other_mag
嘗試在Python shell中運行這些示例。
print(Point(1, 1) < Point(-2, -3)) print(Point(1, 1) < Point(0.5, -0.2)) print(Point(1, 1) < Point(1, 1))
下表列出了需要實現以重載其他比較運算符的特殊函數。
操作符 | 表達式 | 內部 |
---|---|---|
小于(<) | p1 <p2 | p1 .__ lt __(p2) |
小于等于(<=) | p1 <= p2 | p1 .__ le __(p2) |
等于(==) | p1 == p2 | p1 .__ eq __(p2) |
不等于(!=) | p1!= p2 | p1 .__ ne __(p2) |
大于(>) | p1> p2 | p1 .__ gt __(p2) |
大于等于(>=) | p1> = p2 | p1 .__ ge __(p2) |
本文基于Python基礎,介紹了Python運算符重載。介紹了什么是運算符重載?通過案例的分析,進行講解。分模塊講解了重載+運算符, 重載比較運算符,在實際案例的應用。
通過豐富的案例分析,效果圖的展示,讓讀者能夠更好理解和學習。
大家積極嘗試,有時候看到別人實現起來很簡單,但是到自己動手實現的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。
感謝各位的閱讀,以上就是“什么是Python運算符重載 ”的內容了,經過本文的學習后,相信大家對什么是Python運算符重載 這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。