在Python中,如果我們想實(shí)現(xiàn)創(chuàng)建類似于序列和映射的類(可以迭代以及通過[下標(biāo)]返回元素),可以通過重寫魔法方法 __getitem__、__setitem__、__delitem__、__len__ 方法去模擬。
網(wǎng)站建設(shè)、做網(wǎng)站介紹好的網(wǎng)站是理念、設(shè)計(jì)和技術(shù)的結(jié)合。成都創(chuàng)新互聯(lián)公司擁有的網(wǎng)站設(shè)計(jì)理念、多方位的設(shè)計(jì)風(fēng)格、經(jīng)驗(yàn)豐富的設(shè)計(jì)團(tuán)隊(duì)。提供PC端+手機(jī)端網(wǎng)站建設(shè),用營銷思維進(jìn)行網(wǎng)站設(shè)計(jì)、采用先進(jìn)技術(shù)開源代碼、注重用戶體驗(yàn)與SEO基礎(chǔ),將技術(shù)與創(chuàng)意整合到網(wǎng)站之中,以契合客戶的方式做到創(chuàng)意性的視覺化效果。
__getitem__(self,key): 返回鍵對應(yīng)的值。
__setitem__(self,key,value): 設(shè)置給定鍵的值
__delitem__(self,key): 刪除給定鍵對應(yīng)的元素。
__len__(): 返回元素的數(shù)量
【注釋】只要實(shí)現(xiàn)了 __getitem__ 和 __len__ 方法,就會(huì)被認(rèn)為是序列。
這些魔術(shù)方法的原理就是:當(dāng)我們對類的屬性item進(jìn)行下標(biāo)的操作時(shí),首先會(huì)被 __getitem__()、__setitem__()、__delitem__() 攔截,從而執(zhí)行我們在方法中設(shè)定的操作,如賦值,修改內(nèi)容,刪除內(nèi)容等等。
這個(gè)方法應(yīng)該以與鍵相關(guān)聯(lián)的方式存儲(chǔ)值,以便之后能夠使用 __setitem__ 來獲取。當(dāng)然,這個(gè)對象可變時(shí)才需要實(shí)現(xiàn)這個(gè)方法。
舉個(gè)栗子:
定義一副撲克牌(不包括大小王),對牌進(jìn)行洗牌,然后發(fā)牌。
Output:
【注意】 :我們會(huì)發(fā)現(xiàn)output中,輸出了: slice(1, 3, None) ,下面給出解釋。
語法:
參數(shù)說明:
slice() 函數(shù)實(shí)現(xiàn)切片對象,主要用在切片操作函數(shù)里的參數(shù)傳遞。
舉兩個(gè)栗子來看看:
Output:
切片原理
output
(程序員必會(huì)的 hhhhh.....)
看看slice在python3.7中是怎么描述的:
1 首先安裝requests這個(gè)模塊,方法是 輸入pip install requests。當(dāng)然你要裝好pip這個(gè)包管理器。 2 然后 import requests url = " " # 這里是你的url your_param = {'Refer':"sina_index"} # 這里是你要發(fā)送的請求參數(shù)!
屏蔽單句時(shí)使用# 注釋此語句,屏蔽多句時(shí),可以使用三引號(hào)把多行語句引起來
__getattribute__
__getattribute__是屬性訪問攔截器,就是當(dāng)類的屬性被訪問時(shí),會(huì)自動(dòng)調(diào)用類的__getattribute__方法。
參考代碼:
代碼執(zhí)行過程中,當(dāng)調(diào)用實(shí)例對象attribute的name屬性時(shí),不會(huì)直接打印,而是把name的值作為實(shí)參傳進(jìn)__getattribute__方法中,經(jīng)過一系列操作后,再把name的值返回。
python中只要定義了繼承object的類,就默認(rèn)存在屬性攔截器,只不過是攔截后沒有進(jìn)行任何操作,而是直接返回。
我們可以自己改寫__getattribute__方法來實(shí)現(xiàn)相關(guān)功能,比如查看權(quán)限、打印log日志等。
getattr、hasattr、setattr
對象屬性的判斷。
參考代碼:
__getattr__、__setattr__、__delattr__
類支持 . 操作來訪問屬性;定制功能:耗時(shí)、日志等等。
參考代碼:
__getitem__、__setitem__、__delitem__
類支持通過[]來訪問屬性
參考代碼:
__get__、__set__、__delete__
參考代碼:
參考文檔: