小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

python入門教程(九)——魔術(shù)方法與操作符重載

 靜幻堂 2018-10-07
極客饕餮 2018-09-21 13:00:14

一 魔術(shù)方法與操作符重載

魔術(shù)方法是在名稱的開始和結(jié)尾都有雙下劃線的特殊方法.

它們也被稱為dunders

__init__就是魔術(shù)方法,還有其他幾個,它們被用來創(chuàng)建不能用普通方法表示的功能.

魔術(shù)方法的一個常見功能就是運算符重載

這意味著為自定義類定義運算符,允許使用+和*等運算符

比如,使用魔術(shù)方法__add__重載+

class Vector2D:
def __init__(self,x,y):
self.x=x
self.y=y
def __add__(self,other):
return Vector2D(self.x+other.x,self.y+other.y)
first=Vector2D(5,7)
second=Vector2D(3,9)
result=first+second
print(result.x)
print(result.y)

結(jié)果:

8

16

__add__方法允許為我們的類中的+運算符定義自定義的功能.

上面的例子中,+添加了對象的相應(yīng)屬性并返回一個包含結(jié)果的新對象.

一旦定義了,我們就可以將這個類的兩個對象相加.

常見的魔術(shù)方法:

__sub__:對應(yīng)-

__mul__:對應(yīng)*

__truediv__:對應(yīng)/

__floordiv__對應(yīng)//

__mod__對應(yīng)%

__pow__對應(yīng)**

__and__對應(yīng)&

__xor__對應(yīng)^

__or__對應(yīng)|

表達(dá)式x+y被翻譯為x.__add__(y)

然而,如果x沒有實現(xiàn)__add__,并且x和y的類型不同,則調(diào)用y.__radd__(x)

對于剛剛提到的所有魔術(shù)方法,都有等價的方法.

例如:

class SpecialString:
def __init__(self,cont):
self.cont=cont
def __truediv__(self,other):
line="="*len(other.cont)
return " ".join([self.cont,line,other.cont])
spam=SpecialString("spam")
hello=SpecialString("Hello,world!")
print(spam/hello)

結(jié)果:

python入門教程(九)——魔術(shù)方法與操作符重載

python也為比較運算符提供了魔術(shù)方法.

__lt__對應(yīng)小于(low than)

__gt__對應(yīng)大于(great than)

__eq__對應(yīng)等于(equals)

__ne__對應(yīng)不等于

__le__對應(yīng)小于等于

__ge__對應(yīng)大于等于

有幾個神奇的方法使類像容器一樣行事

__len__對應(yīng)len()

__getitem__對應(yīng) 獲取索引

__setitem__對應(yīng) 分配索引

__delitem__對應(yīng) 刪除索引

__iter__對應(yīng) 迭代對象(例如for循環(huán))

__contains__ 對應(yīng) in

還有很多其他的魔術(shù)方法,比如講__call__作為函數(shù)調(diào)用對象,__int__,__str__等等,將對象轉(zhuǎn)換為內(nèi)建類型.

例如:

import random
class VagueList:
def __init__(self,cont):
self.cont=cont
def __getitem__(self,index):
#索引加上-1或0,1
return self.cont[index+random.randint(-1,1)]
def __len__(self):
return random.randint(0,len(self.cont)*2)
vague_list=VagueList(["a","b","c","d","e"])
print(len(vague_list))
print(len(vague_list))
print(vague_list[2])
print(vague_list[2])

結(jié)果:

python入門教程(九)——魔術(shù)方法與操作符重載

我們重寫了類VagueList的len()函數(shù)來返回一個隨機(jī)數(shù)

索引函數(shù)還根據(jù)表達(dá)式從列表中返回一個范圍內(nèi)的隨機(jī)項目

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多