久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Python:魔術(shù)方法(__getitem__、__len__等包含雙下劃線(xiàn)構(gòu)成的方法)的簡(jiǎn)介,、使用案例之詳細(xì)攻略

 處女座的程序猿 2022-06-28 發(fā)布于上海

Python:魔術(shù)方法(__getitem__,、__len__等包含雙下劃線(xiàn)構(gòu)成的方法)的簡(jiǎn)介、使用案例之詳細(xì)攻略


魔術(shù)方法Magic Method的簡(jiǎn)介

? ? ? ?Magic Method,即魔術(shù)方法,顧名思義,這些方法很強(qiáng)大,充滿(mǎn)魔力,可以讓你實(shí)現(xiàn)很多功能,。魔術(shù)方法是python內(nèi)置方法,不需要主動(dòng)調(diào)用,存在的目的是為了給python的解釋器進(jìn)行調(diào)用,幾乎每個(gè)魔法方法都有一個(gè)對(duì)應(yīng)的內(nèi)置函數(shù),或者運(yùn)算符,當(dāng)我們對(duì)這個(gè)對(duì)象使用這些函數(shù)或者運(yùn)算符時(shí)就會(huì)調(diào)用類(lèi)中的對(duì)應(yīng)魔法方法,可以理解為重寫(xiě)這些python的內(nèi)置函數(shù),。

(1)、舉例理解Magic Method

? ? ? ?在Python中,像__getitem__這種由兩個(gè)雙下劃線(xiàn)構(gòu)成的方法,統(tǒng)一被稱(chēng)為魔術(shù)方法,。魔術(shù)方法是為了給python解釋器用的,。魔術(shù)方法是屬于類(lèi)的方法,都是針對(duì)類(lèi)來(lái)進(jìn)行操作。也就是說(shuō)不需要實(shí)例化類(lèi)就可以訪(fǎng)問(wèn)到該方法,同時(shí),實(shí)例化的對(duì)象都可以訪(fǎng)問(wèn)到該方法,。
比如當(dāng)使用len(function)時(shí),實(shí)際上調(diào)用的就是object.__len__方法,。而在使用function['key']的形式來(lái)訪(fǎng)問(wèn)元素時(shí),實(shí)際上調(diào)用的是object.__getitem__(key)方法,。
使用__getitem__和__len__方法,我們就可以實(shí)現(xiàn)一個(gè)對(duì)自定義數(shù)據(jù)類(lèi)型的迭代和訪(fǎng)問(wèn),。

常用的魔術(shù)方法使用案例

1、常用方法

(1),、__init__:初始化方法

構(gòu)造器,當(dāng)一個(gè)實(shí)例被創(chuàng)建的時(shí)候調(diào)用的初始化方法

class Test_init:
    def __init__(self):
        print("魔術(shù)方法之__init__方法")
print(Test_init())


(2),、__len__():返回容器中元素的個(gè)數(shù)

要想針對(duì)類(lèi)的對(duì)象實(shí)例使len()函數(shù)成功執(zhí)行,必須要在類(lèi)中定義__len__()。如果沒(méi)有定義__len__(),那么輸入len(c1)會(huì)提示出錯(cuò),顯然錯(cuò)誤原因是因?yàn)镃lass01類(lèi)中并沒(méi)有l(wèi)en()的定義,。因?yàn)閘en()必須接收一個(gè)具體的實(shí)例化對(duì)象的屬性,如果改成len(c1.values)也能成功執(zhí)行!

# __ len__():返回元素的數(shù)量
class Test_len(object):
    def __init__(self, *args):
        self.names = args
    def __len__(self):
        print("魔術(shù)方法之__len__方法")
        return len(self.names)
res02 = Test_len('Bob', 'Alice', 'Tom')
print(len(res02))

2,、比較操作符

(1)、__lt__(self, other):定義小于號(hào)的行為

x < y 調(diào)用 x__lt__(y)


3,、算數(shù)運(yùn)算符

(1),、__add__(self, other):定義加法的行為:+

4、增量賦值運(yùn)算

(1)、__iadd__(self, other): 定義賦值加法的行為:+=

5,、一元操作符

(1),、__pos__(self):定義正號(hào)的行為:+x

6、容器類(lèi)型

(1),、_getitem__():返回鍵對(duì)應(yīng)的值

如果在類(lèi)中定義了這個(gè)__getitem__ 方法,那么它的實(shí)例對(duì)象(假定為p),可以像這樣p[key] 取值,。當(dāng)實(shí)例對(duì)象做p[key] 運(yùn)算時(shí),會(huì)調(diào)用類(lèi)中的方法__getitem__。__getitem __可以讓對(duì)象實(shí)現(xiàn)迭代功能,這樣可以不斷的調(diào)用數(shù)據(jù),。

class Test_getitem:
    def __init__(self,id):
        self.id=id
        
    # ,它的實(shí)例對(duì)象P,可以以P[key]形式取值
    def __getitem__(self, item):   # 當(dāng)實(shí)例對(duì)象做P[key]運(yùn)算時(shí),就會(huì)調(diào)用類(lèi)中的__getitem__()方法
        print("魔術(shù)方法之__getitem__方法")
        return self.id
 
res = Test_getitem('This is id')
print(res.id)
print(res[0])   # 當(dāng)實(shí)例對(duì)象做P[key]運(yùn)算時(shí),就會(huì)調(diào)用類(lèi)中的__getitem__()方法
print(res['0000'])

    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶(hù) 評(píng)論公約

    類(lèi)似文章 更多