色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

您的位置:首頁技術(shù)文章
文章詳情頁

python3,定制類,getattr相關(guān)用法

瀏覽:112日期:2022-08-30 13:54:27

問題描述

class Chain(object): def __init__(self,path=''):self._path = path def __getattr__(self,path):return Chain('%s/%s' %(self._path,path)) def __call__(self,path):return Chain('%s/%s' %(self._path,path)) def __str__(self):return self._path __repr__ = __str__ print(Chain().a.b.user('Michael').c.d)

看了好久還是理解不了這語句,如能詳述一些細節(jié),感激不盡

問題解答

回答1:

getattr(object, name[, default])

class Student(object): def __init__(self):self.name = ’Michael’ def __getattr__(self,attr):return attrs = Student()s.name --> ’Michael’s.score--> ’score’

_getattr__是python里的一個內(nèi)建函數(shù),動態(tài)返回一個屬性當調(diào)用不存在的屬性時,Python會試圖調(diào)用__getattr__(self,’score’)來獲取屬性,并且返回score

__str__用于打印函數(shù)__call__把類當做類似函數(shù)一樣調(diào)用

代碼執(zhí)行流程: Chain()創(chuàng)建一個實例,并且 path初始默認為 '' ,Chain().a 時,類中并沒有 a 屬性,Python解析器調(diào)用 getattr函數(shù) --> __getattr__(self,path=’a’),并返回一個Chain實例,然后把/a 賦值gei path 傳入,繼續(xù)b,因為同樣沒有b 屬性,執(zhí)行g(shù)etattr函數(shù),將/a/b傳入,然后.user(“Michael”),先會執(zhí)行g(shù)etattr返回Chain實例,但是因為有()括號在,所以返回的是Chain(),這個就會調(diào)用call函數(shù)了,然后把“ChenTian”作為path傳入,然后call函數(shù)就返回了/a/b/user/ChenTian,剩下的類同。

.user('Michael”) 剛開始的user被getattr函數(shù)捕獲,并返回Chain(),然后再執(zhí)行__call__來調(diào)用 'Michael'

代碼流程圖

標簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 日本在线免费观看视频 | 91香蕉视频成人 | 特别福利视频在线观看 | 成人免费视频日本 | 亚洲精品人成网线在线 | 国产成人ay手机在线观看 | 日韩一区二区免费看 | 欧美成人看片一区二区三区尤物 | 国产一级黄色网 | 99久久成人 | 久久综合久美利坚合众国 | 婷婷久久久五月综合色 | 日本道综合一本久久久88 | 香蕉99国内自产自拍视频 | 亚洲精品中文字幕一区 | 欧美一级在线观看播放 | 点击进入不卡毛片免费观看 | 亚洲女人在线 | 特黄a三级三级三级 | 女人让男人桶的小视频 | 日韩欧美成人乱码一在线 | 日本人成18在线播放 | 国产亚洲一区二区三区在线 | 欧洲一级毛片 | 国产原创系列在线 | 亚洲精品国产成人 | 欧美极品在线视频 | 国产成人精品一区二区三区 | a级男女性高爱潮高清试 | 一级做a爰片性色毛片视频图片 | 99九九精品国产高清自在线 | 亚洲天堂久久新 | 看一级毛片国产一级毛片 | 成人国产欧美精品一区二区 | 亚洲第一色网 | 国产成人黄网在线免 | 久久久久久久性高清毛片 | 久久福利青草精品免费 | 欧美一级在线免费观看 | 国产自一区 | 久久ri精品高清一区二区三区 |