国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

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

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

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

問(wèn)題描述

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)

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

問(wèn)題解答

回答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里的一個(gè)內(nèi)建函數(shù),動(dòng)態(tài)返回一個(gè)屬性當(dāng)調(diào)用不存在的屬性時(shí),Python會(huì)試圖調(diào)用__getattr__(self,’score’)來(lái)獲取屬性,并且返回score

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

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

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

代碼流程圖

標(biāo)簽: Python 編程
相關(guān)文章:
主站蜘蛛池模板: 惠州市| 吉木乃县| 大安市| 东海县| 买车| 建宁县| 天津市| 融水| 正宁县| 三明市| 邵武市| 浦县| 霍山县| 阿拉善右旗| 龙海市| 迁安市| 香河县| 上高县| 石林| 克山县| 横峰县| 广宁县| 宣汉县| 广平县| 铜梁县| 马尔康县| 乐至县| 遵义县| 盈江县| 扶风县| 台前县| 根河市| 陵川县| 上思县| 南宫市| 牙克石市| 和林格尔县| 巧家县| 肇州县| 长宁县| 府谷县|