日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Python打印對(duì)象的全部屬性

 印度阿三17 2019-07-24

  __dict__方法

  遇到這樣一個(gè)情況,要打印出一個(gè)對(duì)象的各種屬性。但是不同對(duì)象的屬性名都不一樣,結(jié)構(gòu)也不同,無(wú)法寫一個(gè)代碼來(lái)實(shí)現(xiàn)。然后我找到了__dict__,使用這個(gè)屬性,可以動(dòng)態(tài)獲取到對(duì)象的所有屬性,不包括公用屬性。

  

?

  通過(guò)__dict__,就可以動(dòng)態(tài)的獲取到對(duì)象的全部屬性。獲得的是一個(gè)字典,屬性名是字典的key,屬性值是字典的value。從輸出看,私有屬性也可以獲得,只是不包括公有屬性。

  然后,如果只想要屬性值的話,可以對(duì)字典再加工。復(fù)習(xí)一下字典的3個(gè)方法:

  dict.items() :用元祖來(lái)存放key和vlaue

  dict.keys() : 只包含key

  dict.values() : 只包含value

  上面3個(gè)方法返回的都是一個(gè)可迭代對(duì)象,可以用for遍歷,但不是迭代器,不能用next方法。

  然后用下面的方法打印

  

?

  最后拆分一下打印的時(shí)候用到的方法

  a = dict1.items() 這個(gè)是可迭代對(duì)象,可以用for遍歷

  b = (%s:%s%item for item in a) 用for循環(huán)遍歷a,每一項(xiàng)是個(gè)元祖,把元祖轉(zhuǎn)成%s:%s的字符串形式。最外面的( )就是轉(zhuǎn)成一個(gè)迭代器。也可以用[ ],轉(zhuǎn)成列表。

  c = ‘\n’.join(b) 最后用join()方法完成字符串的拼接

  __str__方法

  又發(fā)現(xiàn)一個(gè)更好用的方法,并且可以獲取到公有屬性了。__str__方法是在打印這個(gè)對(duì)象的時(shí)候,不再打印對(duì)象的內(nèi)存地址,而是打印__str__方法的返回值:

  

?

  這里要注意,返回值必須是字符串,所以得傳一個(gè)數(shù)據(jù)類型

  return .join(str(item) for item in (self.display,self.name,self.age,self.course,self.__salary)) 這個(gè)也可以這么寫

  return %s %s %s %s %s%(self.display,self.name,self.age,self.course,self.__salary) 這么寫雖然好理解,但是前面的%s的數(shù)量必須和后面的變量一致,如果要加1個(gè)或減1個(gè)變量,前后都得改。

  __str__方法可以完全自定義自己對(duì)象的輸出格式,既然是自定義的方法,那么還可以加上參數(shù)控制。但是調(diào)用的時(shí)候似乎并沒(méi)有地方填參數(shù)。

  其實(shí)是在print調(diào)用對(duì)象的時(shí)候,系統(tǒng)已經(jīng)幫我們自動(dòng)將print指向了__str__方法,也就是說(shuō) print(t1) 其實(shí)執(zhí)行的是 print(t1.__str__()) ,這個(gè)時(shí)候我們就可以自己寫全,然后加上參數(shù)。

  

?

  其實(shí)這里并沒(méi)不是打印了所有的屬性,而是我們自定義了打印內(nèi)容。但是自定義的位置是在類中的,這個(gè)位置是可以獲取到全部屬性的。

  終極方法

  其實(shí)就是把上面2個(gè)方法一起用。其實(shí)有上面2個(gè)方法應(yīng)該就可以了,不過(guò)既然都搞明白了,留個(gè)記錄也好。

  先提一個(gè)點(diǎn),在定義了__str__方法后,雖然打印出來(lái)是字符串,但是在其他時(shí)候傳的值還是對(duì)象。如果想獲取就是打印的值而不是對(duì)象,那么還是用對(duì)象__str__() 來(lái)傳遞,下面就是最終的例子:

  

?

來(lái)源:https://www./content-1-351351.html

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多