欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python打印對(duì)象所有屬性和值的方法小結(jié)

 更新時(shí)間:2025年06月17日 11:18:23   作者:1010n111  
在Python開發(fā)過程中,調(diào)試代碼時(shí)經(jīng)常需要查看對(duì)象的當(dāng)前狀態(tài),也就是對(duì)象的所有屬性和對(duì)應(yīng)的值,然而,Python并沒有像PHP的print_r那樣直接提供一個(gè)內(nèi)置函數(shù)來實(shí)現(xiàn)這一功能,不過,Python提供了一些工具和方法,可以組合使用來達(dá)到打印對(duì)象屬性和值的目的,下面小編給大家講講

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中的元類編程入門指引

    Python中的元類編程入門指引

    這篇文章主要介紹了Python中的元類編程入門指引,來自于IBM官方網(wǎng)站技術(shù)文檔,需要的朋友可以參考下
    2015-04-04
  • Python發(fā)送網(wǎng)絡(luò)請(qǐng)求(requests)

    Python發(fā)送網(wǎng)絡(luò)請(qǐng)求(requests)

    這篇文章主要介紹了Python發(fā)送網(wǎng)絡(luò)請(qǐng)求(requests),具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • Python實(shí)現(xiàn)蒙特卡洛算法小實(shí)驗(yàn)過程詳解

    Python實(shí)現(xiàn)蒙特卡洛算法小實(shí)驗(yàn)過程詳解

    這篇文章主要介紹了Python實(shí)現(xiàn)基于蒙特卡洛算法過程詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 解讀dataframe中有關(guān)inf的處理技巧

    解讀dataframe中有關(guān)inf的處理技巧

    這篇文章主要介紹了解讀dataframe中有關(guān)inf的處理技巧,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-09-09
  • 使用Pycharm(Python工具)新建項(xiàng)目及創(chuàng)建Python文件的教程

    使用Pycharm(Python工具)新建項(xiàng)目及創(chuàng)建Python文件的教程

    這篇文章主要介紹了使用Pycharm(Python工具)新建項(xiàng)目及創(chuàng)建Python文件的教程,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-04-04
  • python基礎(chǔ)教程之csv格式文件的寫入與讀取

    python基礎(chǔ)教程之csv格式文件的寫入與讀取

    逗號(hào)分隔值(Comma-Separated Values,CSV,也稱為字符分隔值,分隔字符也可以不是逗號(hào)),新這篇文章主要給大家介紹了關(guān)于python基礎(chǔ)教程之csv格式文件的寫入與讀取的相關(guān)資料,需要的朋友可以參考下
    2022-03-03
  • 如何使用Python連接?SSH?服務(wù)器并執(zhí)行命令

    如何使用Python連接?SSH?服務(wù)器并執(zhí)行命令

    實(shí)際開發(fā)中,有時(shí)候經(jīng)常需要查看日志,有時(shí)候使用ssh工具打開就為了看一下錯(cuò)誤日志又比較麻煩,所以今天帶來一個(gè)簡(jiǎn)單的基于python的小工具,感興趣的朋友跟隨小編一起看看吧
    2023-11-11
  • Django中模型Model添加JSON類型字段的方法

    Django中模型Model添加JSON類型字段的方法

    這篇文章主要介紹了Django中模型Model添加JSON類型字段的方法,實(shí)例分析了Python的Django框架模型使用技巧,需要的朋友可以參考下
    2015-06-06
  • Python3使用PySynth制作音樂的方法

    Python3使用PySynth制作音樂的方法

    這篇文章主要介紹了Python3使用PySynth制作音樂的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-09-09
  • PythonWeb項(xiàng)目Django部署在Ubuntu18.04騰訊云主機(jī)上

    PythonWeb項(xiàng)目Django部署在Ubuntu18.04騰訊云主機(jī)上

    這篇文章主要介紹了PythonWeb項(xiàng)目Django部署在Ubuntu18.04騰訊云主機(jī)上的相關(guān)知識(shí),本文通過代碼加文字說明的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值 ,需要的朋友可以參考下
    2019-04-04

最新評(píng)論