Python打印對(duì)象所有屬性和值的方法小結(jié)
Python中打印對(duì)象所有屬性和值的方法
實(shí)現(xiàn)步驟
1. 使用vars()和pprint()
vars()
函數(shù)返回對(duì)象的__dict__
屬性,pprint()
可以對(duì)數(shù)據(jù)進(jìn)行美觀的打印。
from pprint import pprint class MyClass: def __init__(self): self.name = 'John' self.age = 30 obj = MyClass() pprint(vars(obj))
2. 使用dir()和getattr()
dir()
函數(shù)返回對(duì)象的所有屬性名,getattr()
函數(shù)根據(jù)屬性名獲取屬性值。
def dump(obj): for attr in dir(obj): print("obj.%s = %r" % (attr, getattr(obj, attr))) class MyClass: def __init__(self): self.name = 'John' self.age = 30 obj = MyClass() dump(obj)
3. 自定義函數(shù)過濾屬性
可以編寫自定義函數(shù),過濾掉一些不需要的屬性,如私有屬性和方法。
from pprint import pprint from inspect import getmembers from types import FunctionType def attributes(obj): disallowed_names = { name for name, value in getmembers(type(obj)) if isinstance(value, FunctionType) } return { name: getattr(obj, name) for name in dir(obj) if name[0] != '_' and name not in disallowed_names and hasattr(obj, name) } def print_attributes(obj): pprint(attributes(obj)) class MyClass: def __init__(self): self.name = 'John' self.age = 30 def say_hello(self): pass obj = MyClass() print_attributes(obj)
核心代碼
綜合方法示例
from pprint import pprint from inspect import getmembers from types import FunctionType class MyClass: def __init__(self): self.name = 'John' self.age = 30 def say_hello(self): pass def attributes(obj): disallowed_names = { name for name, value in getmembers(type(obj)) if isinstance(value, FunctionType) } return { name: getattr(obj, name) for name in dir(obj) if name[0] != '_' and name not in disallowed_names and hasattr(obj, name) } obj = MyClass() pprint(attributes(obj))
最佳實(shí)踐
- 選擇合適的方法:根據(jù)對(duì)象的類型和需求選擇合適的方法。如果對(duì)象有__dict__屬性,vars()和pprint()組合是一個(gè)簡(jiǎn)單有效的方法;如果需要獲取所有屬性,包括沒有__dict__屬性的對(duì)象,可以使用dir()和getattr()。
- 過濾不必要的屬性:在打印屬性時(shí),過濾掉一些不需要的屬性,如私有屬性和方法,使輸出更簡(jiǎn)潔。
- 使用第三方庫:如果需要更復(fù)雜的功能,如遞歸打印嵌套對(duì)象,可以考慮使用第三方庫,如jsonpickle、ppretty等。
常見問題
1. vars()函數(shù)報(bào)錯(cuò)
vars()
函數(shù)要求對(duì)象有__dict__
屬性,如果對(duì)象沒有該屬性,會(huì)拋出TypeError
異常。例如,set
對(duì)象就沒有__dict__
屬性。
s = {1, 2, 3} try: pprint(vars(s)) except TypeError as e: print(f"Error: {e}")
2. dir()函數(shù)返回過多屬性
dir()
函數(shù)會(huì)返回對(duì)象的所有屬性,包括內(nèi)置屬性和方法,可能會(huì)導(dǎo)致輸出過多不必要的信息??梢酝ㄟ^自定義函數(shù)過濾這些屬性。
3. 遞歸打印問題
如果對(duì)象包含嵌套對(duì)象,直接打印可能無法顯示嵌套對(duì)象的詳細(xì)信息??梢允褂眠f歸函數(shù)或第三方庫來實(shí)現(xiàn)遞歸打印。
以上就是Python打印對(duì)象所有屬性和值的方法小結(jié)的詳細(xì)內(nèi)容,更多關(guān)于Python打印對(duì)象所有屬性和值的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python發(fā)送網(wǎng)絡(luò)請(qǐng)求(requests)
這篇文章主要介紹了Python發(fā)送網(wǎng)絡(luò)請(qǐng)求(requests),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-09-09Python實(shí)現(xiàn)蒙特卡洛算法小實(shí)驗(yàn)過程詳解
這篇文章主要介紹了Python實(shí)現(xiàn)基于蒙特卡洛算法過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-07-07使用Pycharm(Python工具)新建項(xiàng)目及創(chuàng)建Python文件的教程
這篇文章主要介紹了使用Pycharm(Python工具)新建項(xiàng)目及創(chuàng)建Python文件的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-04-04如何使用Python連接?SSH?服務(wù)器并執(zhí)行命令
實(shí)際開發(fā)中,有時(shí)候經(jīng)常需要查看日志,有時(shí)候使用ssh工具打開就為了看一下錯(cuò)誤日志又比較麻煩,所以今天帶來一個(gè)簡(jiǎn)單的基于python的小工具,感興趣的朋友跟隨小編一起看看吧2023-11-11PythonWeb項(xiàng)目Django部署在Ubuntu18.04騰訊云主機(jī)上
這篇文章主要介紹了PythonWeb項(xiàng)目Django部署在Ubuntu18.04騰訊云主機(jī)上的相關(guān)知識(shí),本文通過代碼加文字說明的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下2019-04-04