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