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

一篇文章帶你了解Python運(yùn)算符重載

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

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

一、什么是Python中的運(yùn)算符重載?

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

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

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

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

class Point:
    def __init__(self, x = 0, y = 0):
        self.x = x
        self.y = y

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

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

代碼:

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

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

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

1.  什么是特殊模式?

以雙下劃線開頭的類函數(shù)在Python中稱為特殊函數(shù)。這是因?yàn)椋鼈儾皇瞧胀ǖ暮瘮?shù)。上面定義的init__()函數(shù)就是其中之一。每次創(chuàng)建該類的新對(duì)象時(shí)都會(huì)調(diào)用它。

2. 案例

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

例 :

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

打印輸出沒(méi)有達(dá)到預(yù)想的效果。

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

示例

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)

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

p1 = Point(3,7)
print(p1)

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

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

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

三、重載+運(yùn)算符

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

示例

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)

測(cè)試一下:

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

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

四、重載比較運(yùn)算符

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

假設(shè),想在Point類中實(shí)現(xiàn)小于運(yùn)算符(<) ,讓從原點(diǎn)比較這些點(diǎn)的大小,并為此目的返回結(jié)果。可以如下實(shí)現(xiàn)。

示例

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中運(yùn)行這些示例。

print(Point(1, 1) < Point(-2, -3))


print(Point(1, 1) < Point(0.5, -0.2))


print(Point(1, 1) < Point(1, 1))

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

操作符

表達(dá)式

內(nèi)部

小于(<)

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)

五、總結(jié)

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

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

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

責(zé)任編輯:華軒 來(lái)源: Go語(yǔ)言進(jìn)階學(xué)習(xí)
相關(guān)推薦

2021-04-14 10:00:44

Python運(yùn)算符重載

2021-06-30 00:20:12

Hangfire.NET平臺(tái)

2023-05-12 08:19:12

Netty程序框架

2021-10-20 07:18:59

Go語(yǔ)言運(yùn)算符

2020-09-29 15:13:14

C++語(yǔ)言開發(fā)

2021-03-24 10:00:32

Python遞歸函數(shù)Python基礎(chǔ)

2021-04-24 10:19:41

Python函數(shù)指向

2025-02-19 10:39:26

Python高階函數(shù)函數(shù)名

2021-06-04 09:56:01

JavaScript 前端switch

2021-02-02 18:39:05

JavaScript

2020-11-10 10:48:10

JavaScript屬性對(duì)象

2021-01-29 18:41:16

JavaScript函數(shù)語(yǔ)法

2023-05-08 08:21:15

JavaNIO編程

2021-09-27 09:18:30

ListIterato接口方法

2021-02-26 20:01:57

SVG濾鏡元素

2021-01-26 23:46:32

JavaScript數(shù)據(jù)結(jié)構(gòu)前端

2023-07-30 15:18:54

JavaScript屬性

2021-05-18 08:30:42

JavaScript 前端JavaScript時(shí)

2021-03-09 14:04:01

JavaScriptCookie數(shù)據(jù)

2024-04-19 14:23:52

SwitchJavaScript開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: av免费入口| 欧美 日韩 国产 成人 | 国产乱码精品1区2区3区 | 91视频正在播放 | 国产免费黄网 | 日韩av电影在线观看 | 亚洲欧美一区二区三区国产精品 | 亚洲欧美一区二区三区在线 | 久久国产精品99久久久久久丝袜 | 秋霞电影院午夜伦 | 99热.com| 精品国产一区二区三区在线观看 | 久久精品国产久精国产 | 久久久妇女国产精品影视 | 久久综合狠狠综合久久综合88 | 欧美精品综合在线 | 中文字幕亚洲视频 | 成年无码av片在线 | 国内精品视频在线 | 成人国产精品久久久 | 国产高清一区二区三区 | 91看片在线观看 | 免费观看av | 日本精品在线播放 | 精品久久精品 | 久草视频观看 | 天天操狠狠操 | 国产高清在线观看 | 蜜臀久久 | 91久久精品国产 | 日韩 国产 在线 | 日韩在线一区二区三区 | 91精品国产综合久久久久久丝袜 | 欧美精品久久久久久久久老牛影院 | 中文字幕一区在线观看视频 | 久久在线免费 | 亚洲精品视频一区二区三区 | 久久久精品网站 | 综合久久一区 | 国产一级片久久久 | 欧美久久久久久 |