亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

python3,定制類,getattr相關用法

瀏覽:103日期: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)

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

問題解答

回答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里的一個內建函數,動態返回一個屬性當調用不存在的屬性時,Python會試圖調用__getattr__(self,’score’)來獲取屬性,并且返回score

__str__用于打印函數__call__把類當做類似函數一樣調用

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

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

代碼流程圖

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 日本一视频一区视频二区 | 色综合图片 | 亚洲日韩中文字幕天堂不卡 | 高清视频欧美性生活 | 国产精品久久久久久久久鸭 | 香蕉人精品视频多人免费永久视频 | 国产午夜不卡在线观看视频666 | 日本不卡高清中文字幕免费 | 日韩三级小视频 | 亚洲永久 | 亚洲精品午夜一区二区 | 亚洲欧美久久精品 | 国产欧美亚洲三区久在线观看 | 日韩欧美一区二区在线 | 最新69成人精品毛片 | 免费大片免费观看 | 达达兔午夜一级毛片 | 亚洲 日本 欧美 日韩精品 | 毛茸茸年轻成熟亚洲人 | 成人做爰免视频高清 | 久久国产精品免费一区二区三区 | 日韩精品中文字幕视频一区 | 一级黄色在线视频 | 中文字幕在线播放一区 | 国产三区视频 | 久久黄色大片 | 欧美伦理三级在线播放影院 | 青青草国产一区二区三区 | 中文字幕亚洲第一 | 亚洲高清视频在线观看 | 日韩aⅴ在线观看 | 欧美日韩亚洲视频 | 欧美一级毛片国产一级毛片 | 国产免费看视频 | 免费国内精品久久久久影院 | 2020亚洲欧美日韩在线观看 | 欧美一区二区三区婷婷月色 | 久久婷婷国产综合精品 | 亚洲精品入口一区二区在线观看 | 国产精品偷伦视频免费观看了 | 成人国产一区二区三区精品 |