成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

一篇文章帶你了解Python運算符重載

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

[[393033]]

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

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

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

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

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

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

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

現在,運行代碼并嘗試在Python shell中添加兩個點。

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

代碼:

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

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

二、Python中的特殊函數

1. 什么是特殊模式?

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

2. 案例

使用特殊函數,可以使的類與內置函數兼容。

例 :

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

打印輸出沒有達到預想的效果。

但是,如果在類中定義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) 

現在,讓print()再次嘗試該函數。

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

事實證明這樣更好,當使用內置函數str()或時,將調用相同的方法format()。

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

因此,當您執行str(p1)或format(p1)時,Python在內部執行p1.str()。因此得名,特殊函數。下面繼續回到操作符重載。

三、重載+運算符

要重載+符號,將需要在類中實現add()函數。擁有權利的同時也被賦予了重大的責任。可以在此函數內做任何喜歡的事情。但是返回坐標和的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) 

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

四、重載比較運算符

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

假設,想在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 __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)) 

下表列出了需要實現以重載其他比較運算符的特殊函數。

操作符 表達式 內部
小于(<) 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運算符重載。介紹了什么是運算符重載?通過案例的分析,進行講解。分模塊講解了重載+運算符, 重載比較運算符,在實際案例的應用。

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

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

代碼很簡單,希望能夠幫助你學習。

 

責任編輯:武曉燕 來源: Go語言進階學習
相關推薦

2025-01-09 11:17:19

2023-05-12 08:19:12

Netty程序框架

2021-06-30 00:20:12

Hangfire.NET平臺

2021-10-20 07:18:59

Go語言運算符

2020-09-29 15:13:14

C++語言開發

2021-04-24 10:19:41

Python函數指向

2025-02-19 10:39:26

Python高階函數函數名

2021-03-24 10:00:32

Python遞歸函數Python基礎

2023-09-06 14:57:46

JavaScript編程語言

2020-12-08 08:09:49

SVG圖標Web

2021-05-18 08:30:42

JavaScript 前端JavaScript時

2021-06-24 09:05:08

JavaScript日期前端

2021-09-27 09:18:30

ListIterato接口方法

2021-01-26 23:46:32

JavaScript數據結構前端

2021-03-05 18:04:15

JavaScript循環代碼

2021-03-09 14:04:01

JavaScriptCookie數據

2024-04-19 14:23:52

SwitchJavaScript開發

2023-07-30 15:18:54

JavaScript屬性

2021-02-26 20:01:57

SVG濾鏡元素

2023-05-08 08:21:15

JavaNIO編程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 免费看黄色视屏 | 国产精品不卡 | 成人在线视频一区 | 中文字幕在线第二页 | 91免费观看国产 | 黄色免费在线观看网站 | 欧美国产日本一区 | 亚洲三级在线观看 | 韩日在线视频 | 99成人精品| 国产精品久久久久久一区二区三区 | 日韩精品三区 | 欧美在线一区二区三区 | 国产色婷婷精品综合在线手机播放 | 亚洲精品国产a久久久久久 午夜影院网站 | 中文字幕91 | 欧美一区二区三区精品免费 | 欧美精品一二三 | www国产亚洲精品久久网站 | 中文天堂在线一区 | 久久久久欧美 | 久久国内精品 | 91成人精品| 欧美一级在线免费观看 | 欧美精品福利 | 亚洲 中文 欧美 | 国产精品三级久久久久久电影 | 成人午夜视频在线观看 | 国产黄色精品在线观看 | 免费性视频 | 中文久久| 亚洲最大av | 色综合区 | 亚洲一区二区三区视频 | 爱操av | 99久久电影 | 狠狠干av | 欧美日高清视频 | 日本黄色一级片视频 | 久久久青草婷婷精品综合日韩 | 免费在线观看av网站 |