Python打印對象所有屬性和值的方法小結(jié)
Python中打印對象所有屬性和值的方法
實現(xiàn)步驟
1. 使用vars()和pprint()
vars()函數(shù)返回對象的__dict__屬性,pprint()可以對數(shù)據(jù)進行美觀的打印。
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ù)返回對象的所有屬性名,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))
最佳實踐
- 選擇合適的方法:根據(jù)對象的類型和需求選擇合適的方法。如果對象有__dict__屬性,vars()和pprint()組合是一個簡單有效的方法;如果需要獲取所有屬性,包括沒有__dict__屬性的對象,可以使用dir()和getattr()。
- 過濾不必要的屬性:在打印屬性時,過濾掉一些不需要的屬性,如私有屬性和方法,使輸出更簡潔。
- 使用第三方庫:如果需要更復(fù)雜的功能,如遞歸打印嵌套對象,可以考慮使用第三方庫,如jsonpickle、ppretty等。
常見問題
1. vars()函數(shù)報錯
vars()函數(shù)要求對象有__dict__屬性,如果對象沒有該屬性,會拋出TypeError異常。例如,set對象就沒有__dict__屬性。
s = {1, 2, 3}
try:
pprint(vars(s))
except TypeError as e:
print(f"Error: {e}")
2. dir()函數(shù)返回過多屬性
dir()函數(shù)會返回對象的所有屬性,包括內(nèi)置屬性和方法,可能會導(dǎo)致輸出過多不必要的信息??梢酝ㄟ^自定義函數(shù)過濾這些屬性。
3. 遞歸打印問題
如果對象包含嵌套對象,直接打印可能無法顯示嵌套對象的詳細信息??梢允褂眠f歸函數(shù)或第三方庫來實現(xiàn)遞歸打印。
以上就是Python打印對象所有屬性和值的方法小結(jié)的詳細內(nèi)容,更多關(guān)于Python打印對象所有屬性和值的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
解決tensorflow讀取本地MNITS_data失敗的原因
這篇文章主要介紹了解決tensorflow讀取本地MNITS_data失敗的原因,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-06-06
Python使用pip通過命令設(shè)置國內(nèi)鏡像源的三種方式
在使用?pip?安裝?Python?模塊時,默認的國外鏡像源可能會導(dǎo)致下載速度緩慢甚至超時,為了解決這個問題,可以使用國內(nèi)的鏡像源來加速下載,以下是常用的國內(nèi)鏡像源以及臨時和永久的配置方法,需要的朋友可以參考下2025-08-08
python腳本使用阿里云slb對惡意攻擊進行封堵的實現(xiàn)
這篇文章主要介紹了python腳本使用阿里云slb對惡意攻擊進行封堵的實現(xiàn),本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02
Python基于hashlib模塊的文件MD5一致性加密驗證示例
這篇文章主要介紹了Python基于hashlib模塊的文件MD5一致性加密驗證,涉及Python使用hashlib模塊進行字符串與文件的MD5加密驗證操作相關(guān)實現(xiàn)技巧,需要的朋友可以參考下2018-02-02
Python虛擬環(huán)境virtualenv安裝的詳細教程保姆級(Windows和linux)
本文詳細介紹了如何在Linux和Windows系統(tǒng)上安裝和配置virtualenv虛擬環(huán)境,包括依賴包安裝、系統(tǒng)環(huán)境變量設(shè)置、激活和退出環(huán)境,以及在PyCharm中的應(yīng)用和導(dǎo)出依賴文件,需要的朋友可以參考下2024-09-09

