當前位置:
首頁 > 知識 > Python列印對象的全部屬性

Python列印對象的全部屬性

__dict__方法

遇到這樣一個情況,要列印出一個對象的各種屬性。但是不同對象的屬性名都不一樣,結構也不同,無法寫一個代碼來實現。然後我找到了__dict__,使用這個屬性,可以動態獲取到對象的所有屬性,不包括公用屬性。

通過__dict__,就可以動態的獲取到對象的全部屬性。獲得的是一個字典,屬性名是字典的key,屬性值是字典的value。從輸出看,私有屬性也可以獲得,只是不包括公有屬性。

然後,如果只想要屬性值的話,可以對字典再加工。複習一下字典的3個方法:

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

dict.keys() : 只包含key

dict.values() : 只包含value

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

然後用下面的方法列印

最後拆分一下列印的時候用到的方法

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

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

c = 『\n』.join(b) 最後用join()方法完成字元串的拼接

__str__方法

又發現一個更好用的方法,並且可以獲取到公有屬性了。__str__方法是在列印這個對象的時候,不再列印對象的內存地址,而是列印__str__方法的返回值:

這裡要注意,返回值必須是字元串,所以得傳一個數據類型

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

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

__str__方法可以完全自定義自己對象的輸出格式,既然是自定義的方法,那麼還可以加上參數控制。但是調用的時候似乎並沒有地方填參數。

其實是在print調用對象的時候,系統已經幫我們自動將print指向了__str__方法,也就是說 print(t1) 其實執行的是 print(t1.__str__()) ,這個時候我們就可以自己寫全,然後加上參數。

其實這裡並沒不是列印了所有的屬性,而是我們自定義了列印內容。但是自定義的位置是在類中的,這個位置是可以獲取到全部屬性的。

終極方法

其實就是把上面2個方法一起用。其實有上面2個方法應該就可以了,不過既然都搞明白了,留個記錄也好。

先提一個點,在定義了__str__方法後,雖然列印出來是字元串,但是在其他時候傳的值還是對象。如果想獲取就是列印的值而不是對象,那麼還是用對象__str__()? 來傳遞,下面就是最終的例子:

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

到處是map、flatMap,啥意思?
分散式服務介面請求的順序性

TAG:千鋒JAVA開發學院 |