日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

【python 10】python 魔术方法

發(fā)布時間:2023/12/15 python 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【python 10】python 魔术方法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

    • 一、`__getitem__` 獲取屬性
    • 二、`__setitem__` 設(shè)置屬性
    • 三、`__delitem__` 刪除屬性
    • 四、`__len__` 求長度
    • 五、`__call__` 將類變成一個可調(diào)用的函數(shù)

python 中以 “__” 開頭和結(jié)尾的成員,都被稱為類的特殊成員(特殊屬性和方法)。

一、__getitem__ 獲取屬性

在字典和列表中,我們經(jīng)常會用到 [] 來獲取對應(yīng)元素,因為字典和列表中都內(nèi)置了 __getitem__ 方法。

"__getitem__" in (dir(list)) >>> True "__getitem__" in (dir(dict)) >>> True

__getitem__ 的作用:

當定義了一個類的時候,當該類的實例化對象通過 [] 來取值的時候,會調(diào)用 __getitem__ 方法,也就是說這個方法能夠返回與指定鍵相關(guān)聯(lián)的值

使用 [] 對對象中的屬性進行取值、賦值或刪除時,會自動觸發(fā)對應(yīng)的 __getitem__、__setitem__、__delitem__ 方法

class DataBase:def __init__(self,id,address):#初始化方法self.id=idself.address=addressself.d={self.id:1,self.address:"192.168.1.1"}def __getitem__(self,key):return self.d.get(key,"default")data=DataBase(1,"192.168.1.1") print(data['hi']) # output default print(data[data.id]) # output 1 print(data[data.address]) # output 192.168.1.1 print(data[1]) # output 1 class Person(object):def __init__(self, info):self.info = infodef __getitem__(self, key):print('__getitem__:', key)return self.info[key] person_info = {'xiaowang': 1, 'xiaoming': 2, 'xiaohong': 3} person = Person(person_info) print(person['xiaoming']) >>> __getitem__: xiaoming 2

如果沒有定義 __getitem__ 但使用 [] 來取屬性的話,則會報錯:

class Person(object):def __init__(self, info):self.info = info person_info = {'xiaowang': 1, 'xiaoming': 2, 'xiaohong': 3} person = Person(person_info) print(person['xiaoming']) >>> TypeError: 'Person' object is not subscriptable

二、__setitem__ 設(shè)置屬性

__setitem__ 可以設(shè)置屬性,可以新增,也可以修改現(xiàn)有的

class Person(object):def __init__(self, info):self.info = infodef __setitem__(self, key, value):print('__setitem__:', key, value)self.info[key] = value person_info = {'xiaowang': 1, 'xiaoming': 2, 'xiaohong': 3} person = Person(person_info)###### 2、修改 person['xiaobai'] = 4 print('person_info after change:', person_info) >>> __setitem__: xiaobai 4 person_info after change: {'xiaowang': 1, 'xiaoming': 2, 'xiaohong': 3, 'xiaobai': 4} class Person(object):def __init__(self, info):self.info = infodef __setitem__(self, key, value):print('__setitem__:', key, value)self.info[key] = value person_info = {'xiaowang': 1, 'xiaoming': 2, 'xiaohong': 3} person = Person(person_info)###### 2、修改 person['xiaowang'] = 5 print('person_info after change:', person_info) >>> __setitem__: xiaowang 5 person_info after change: {'xiaowang': 5, 'xiaoming': 2, 'xiaohong': 3}

三、__delitem__ 刪除屬性

class Person(object):def __init__(self, info):self.info = infodef __delitem__(self, key):print('__delitem__:', key)del self.info[key]def __len__(self):return len(self.info) person_info = {'xiaowang': 1, 'xiaoming': 2, 'xiaohong': 3} person = Person(person_info) ###### 3、刪除 del person['xiaoming'] print('person_info after del:', person_info) >>> __delitem__: xiaoming person_info after del: {'xiaowang': 1, 'xiaohong': 3}

四、__len__ 求長度

class Person(object):def __init__(self, info):self.info = infodef __len__(self):return len(self.info) person_info = {'xiaowang': 1, 'xiaoming': 2, 'xiaohong': 3} person = Person(person_info) ###### 4、求長度 print('final len of info:', len(person_info)) >>> final len of info: 3

總體代碼:

class Person(object):def __init__(self, info):self.info = infodef __getitem__(self, key):print('__getitem__:', key)return self.info[key]def __setitem__(self, key, value):print('__setitem__:', key, value)self.info[key] = valuedef __delitem__(self, key):print('__delitem__:', key)del self.info[key]def __len__(self):return len(self.info) person_info = {'xiaowang': 1, 'xiaoming': 2, 'xiaohong': 3} person = Person(person_info) ###### 1、獲取 print('xiaoming:', person['xiaoming']) >>> __getitem__: xiaoming xiaoming: 2###### 2、修改 person['xiaobai'] = 4 print('person_info after change:', person_info) >>> __setitem__: xiaobai 4 person_info after change: {'xiaowang': 1, 'xiaoming': 2, 'xiaohong': 3, 'xiaobai': 4}###### 3、刪除 del person['xiaoming'] print('person_info after del:', person_info) >>> __delitem__: xiaoming person_info after del: {'xiaowang': 1, 'xiaohong': 3, 'xiaobai': 4}###### 4、求長度 print('final len of info:', len(person_info)) >>> final len of info: 3

五、__call__ 將類變成一個可調(diào)用的函數(shù)

__call__ 的本質(zhì)其實是將一個類變成一個函數(shù),使得這個類的實例可以像函數(shù)一樣調(diào)用

python 中,凡是可以將 () 直接應(yīng)用到自身并執(zhí)行,都稱為“可調(diào)用對象”,可調(diào)用對象包括自定義函數(shù)、python 內(nèi)置函數(shù)、以及類實例對象(即有 call 的類)

對于可調(diào)用對象,名稱() 可以理解為 名稱.__call__() 的簡寫,

class Test(object):def __init__(self, name):self.name = namedef __call__(self):print('here is in __call__!')print('my name is {}'.format(self.name)) test = Test('xiaowang') test() >>> here is in __call__! my name is xiaowang

當類中沒寫 __call__ 的時候:

class Test(object):def __init__(self, name):self.name = name test = Test('xiaowang') test() >>> TypeError: 'Test' object is not callable 報錯該對象無法調(diào)用

總結(jié)

以上是生活随笔為你收集整理的【python 10】python 魔术方法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 亚洲国产成人在线视频 | 好男人www在线视频 我们的2018在线观看免费高清 | 91高清免费 | 三级成人在线 | 国产一区二区三区色淫影院 | 日本午夜一区二区 | 少妇久久久久久被弄到高潮 | www.国产三级| 国产成人日韩 | 久久一区精品 | 亚洲天堂av免费在线观看 | 亚洲av片不卡无码久久 | 精品无码一区二区三区 | 精品国模一区二区三区 | 男朋友是消防员第一季 | 欧美aaa级片| 日韩在线电影一区二区 | 伊伊成人网 | 丁香婷婷激情 | 看个毛片| 一本大道东京热无码aⅴ | 亚洲熟妇中文字幕五十中出 | 欧美 唯美 清纯 偷拍 | 欧美三级黄| 911国产视频 | 成人免费视频一区 | av免费网页| 99re国产在线 | 天天摸天天操 | www.香蕉视频.com | 国产在线观看第一页 | 日韩av免费播放 | 韩日激情视频 | 亚洲国产伊人 | 国产女同91疯狂高潮互磨 | 8090理论片午夜理伦片 | 粉嫩精品久久99综合一区 | 欧美精品播放 | 猛男被粗大男男1069 | 国产乱在线 | 琪琪久久| 91丨porny丨中文| 99久久精品一区二区 | 欧美人妻一区二区 | av电影在线观看网址 | 久久受| 99色影院 | 国产美女久久久久 | 亚洲av中文无码乱人伦在线视色 | 初音未来打屁股 | 欧美成人免费视频 | 欧美在线二区 | 日本人与黑人做爰视频 | 亚洲一区二区色 | 永久在线观看 | 欧美性受xxxx黑人xyx | 韩国精品一区二区 | 欧美老女人视频 | 美日韩一区 | 免费的毛片网站 | 人人爽人人爽人人爽 | 一本一道久久 | 国产高清片 | 国产精品无码av在线有声小说 | 神秘马戏团在线观看免费高清中文 | 青草福利视频 | 欧美一区二区三区四区在线观看 | 超碰老司机 | 日韩av网址大全 | 色涩av| 日韩一区2区 | 国产美女被遭强高潮免费网站 | 黑料网在线观看 | 97自拍偷拍 | 五月丁香 | 中文写幕一区二区三区免费观成熟 | 91精品国产一区二区三区香蕉 | 夜夜干天天操 | 国产精品久免费的黄网站 | 偷拍xxxx | 俺也去av| 日韩一区二区三区在线观看 | 日韩av网站大全 | 国产精品ⅴa有声小说 | 亚洲二区中文字幕 | 日本网站免费观看 | 俺也去五月婷婷 | 高潮一区 | 天天干天天色综合 | 国内自拍在线观看 | 精品夜夜澡人妻无码av | 中国黄色录像一级片 | 91天堂网| 先锋影音一区二区 | 五月婷婷六月综合 | 奶水喷溅 在线播放 | 久久噜噜| av日韩一区二区三区 | 欧洲亚洲激情 |