日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
一篇文章帶你了解Python運算符重載

您可以根據(jù)所使用的操作數(shù)來更改Python中運算符的含義。這種做法稱為運算符重載,今天我們一起來聊聊運算符重載。

成都創(chuàng)新互聯(lián)公司是一家專注于成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)與策劃設(shè)計,曲沃網(wǎng)站建設(shè)哪家好?成都創(chuàng)新互聯(lián)公司做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:曲沃等地區(qū)。曲沃做網(wǎng)站價格咨詢:18980820575

一、什么是Python中的運算符重載?

Python運算符用于內(nèi)置類。但是相同的運算符對不同的類型有不同的行為。例如,+運算符將對兩個數(shù)字執(zhí)行算術(shù)加法、合并兩個列表并連接兩個字符串。

Python中的這一功能允許同一運算符根據(jù)上下文具有不同的含義,稱為運算符重載。

那么,當(dāng)將它們與用戶定義類的對象一起使用時會發(fā)生什么呢?

示例 :下面的類,它試圖在二維坐標(biāo)系中模擬一個點。

 
 
 
 
  1. class Point: 
  2.     def __init__(self, x = 0, y = 0): 
  3.         self.x = x 
  4.         self.y = y 

現(xiàn)在,運行代碼并嘗試在Python shell中添加兩個點。

 
 
 
 
  1. p1 = Point(2,3) 
  2. p2 = Point(-1,2) 
  3. print(p1 + p2) 

代碼:

這是很多錯誤。由于Python不知道如何將兩個Point對象加在一起而引發(fā)TypeError。

但是,可以通過運算符重載向Python教授這一點。但是首先,讓對特殊函數(shù)有所了解。

二、Python中的特殊函數(shù)

1. 什么是特殊模式?

以雙下劃線開頭的類函數(shù)在Python中稱為特殊函數(shù)。這是因為,它們不是普通的函數(shù)。上面定義的init__()函數(shù)就是其中之一。每次創(chuàng)建該類的新對象時都會調(diào)用它。

2. 案例

使用特殊函數(shù),可以使的類與內(nèi)置函數(shù)兼容。

例 :

 
 
 
 
  1. p1 = Point(2,3) 
  2. print(p1) 

打印輸出沒有達到預(yù)想的效果。

但是,如果在類中定義str()方法,可以控制它的打印輸出方式。把這個加到的類中。

示例

 
 
 
 
  1. class Point: 
  2.     def __init__(self, x = 0, y = 0): 
  3.         self.x = x 
  4.         self.y = y 
  5.      
  6.     def __str__(self): 
  7.         return "({0},{1})".format(self.x,self.y) 

現(xiàn)在,讓print()再次嘗試該函數(shù)。

 
 
 
 
  1. p1 = Point(3,7) 
  2. print(p1) 

事實證明這樣更好,當(dāng)使用內(nèi)置函數(shù)str()或時,將調(diào)用相同的方法format()。

 
 
 
 
  1. p1 = Point(2, 3) 
  2. print(str(p1)) 
  3. print(format(p1)) 

因此,當(dāng)您執(zhí)行str(p1)或format(p1)時,Python在內(nèi)部執(zhí)行p1.str()。因此得名,特殊函數(shù)。下面繼續(xù)回到操作符重載。

三、重載+運算符

要重載+符號,將需要在類中實現(xiàn)add()函數(shù)。擁有權(quán)利的同時也被賦予了重大的責(zé)任??梢栽诖撕瘮?shù)內(nèi)做任何喜歡的事情。但是返回坐標(biāo)和的Point對象是明智的。

示例

 
 
 
 
  1. class Point: 
  2.     def __init__(self, x = 0, y = 0): 
  3.         self.x = x 
  4.         self.y = y 
  5.      
  6.     def __str__(self): 
  7.         return "({0},{1})".format(self.x,self.y) 
  8.      
  9.     def __add__(self,other): 
  10.         x = self.x + other.x 
  11.         y = self.y + other.y 
  12.         return Point(x,y) 

測試一下:

 
 
 
 
  1. p1 = Point(2,3) 
  2. p2 = Point(-1,2) 
  3. print(p1 + p2) 

實際上發(fā)生的是,當(dāng)您執(zhí)行p1 + p2時,Python會調(diào)用p1 .__ add (p2),也就是Point . add __(p1,p2)。同樣,也可以重載其他運算符。

四、重載比較運算符

Python不限制運算符重載為算術(shù)運算符。也可以重載比較運算符。

假設(shè),想在Point類中實現(xiàn)小于運算符(<) ,讓從原點比較這些點的大小,并為此目的返回結(jié)果??梢匀缦聦崿F(xiàn)。

示例

 
 
 
 
  1. class Point: 
  2.     def __init__(self, x = 0, y = 0): 
  3.         self.x = x 
  4.         self.y = y 
  5.      
  6.     def __str__(self): 
  7.         return "({0},{1})".format(self.x,self.y) 
  8.      
  9.     def __lt__(self,other): 
  10.         self_mag = (self.x ** 2) + (self.y ** 2) 
  11.         other_mag = (other.x ** 2) + (other.y ** 2) 
  12.         return self_mag < other_mag 

嘗試在Python shell中運行這些示例。

 
 
 
 
  1. print(Point(1, 1) < Point(-2, -3)) 
  2.  
  3. print(Point(1, 1) < Point(0.5, -0.2)) 
  4.  
  5. print(Point(1, 1) < Point(1, 1)) 

下表列出了需要實現(xiàn)以重載其他比較運算符的特殊函數(shù)。

操作符 表達式 內(nèi)部
小于(<)p1 p1 .__ lt __(p2)
小于等于(<=)p1 <= p2p1 .__ le __(p2)
等于(==)p1 == p2p1 .__ eq __(p2)
不等于(!=)p1!= p2p1 .__ ne __(p2)
大于(>)p1> p2p1 .__ gt __(p2)
大于等于(>=)p1> = p2p1 .__ ge __(p2)

五、總結(jié)

本文基于Python基礎(chǔ),介紹了Python運算符重載。介紹了什么是運算符重載?通過案例的分析,進行講解。分模塊講解了重載+運算符, 重載比較運算符,在實際案例的應(yīng)用。

通過豐富的案例分析,效果圖的展示,讓讀者能夠更好理解和學(xué)習(xí)。

大家積極嘗試,有時候看到別人實現(xiàn)起來很簡單,但是到自己動手實現(xiàn)的時候,總會有各種各樣的問題,切勿眼高手低,勤動手,才可以理解的更加深刻。

代碼很簡單,希望能夠幫助你學(xué)習(xí)。


文章題目:一篇文章帶你了解Python運算符重載
分享網(wǎng)址:http://www.5511xx.com/article/dpjpjcp.html