亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Python打印對象所有屬性和值的方法小結

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

Python中打印對象所有屬性和值的方法

實現(xiàn)步驟

1. 使用vars()和pprint()

vars()函數(shù)返回對象的__dict__屬性,pprint()可以對數(shù)據進行美觀的打印。

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ù)根據屬性名獲取屬性值。

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))

最佳實踐

  • 選擇合適的方法:根據對象的類型和需求選擇合適的方法。如果對象有__dict__屬性,vars()和pprint()組合是一個簡單有效的方法;如果需要獲取所有屬性,包括沒有__dict__屬性的對象,可以使用dir()和getattr()。
  • 過濾不必要的屬性:在打印屬性時,過濾掉一些不需要的屬性,如私有屬性和方法,使輸出更簡潔。
  • 使用第三方庫:如果需要更復雜的功能,如遞歸打印嵌套對象,可以考慮使用第三方庫,如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ù)會返回對象的所有屬性,包括內置屬性和方法,可能會導致輸出過多不必要的信息??梢酝ㄟ^自定義函數(shù)過濾這些屬性。

3. 遞歸打印問題

如果對象包含嵌套對象,直接打印可能無法顯示嵌套對象的詳細信息。可以使用遞歸函數(shù)或第三方庫來實現(xiàn)遞歸打印。

以上就是Python打印對象所有屬性和值的方法小結的詳細內容,更多關于Python打印對象所有屬性和值的資料請關注腳本之家其它相關文章!

相關文章

  • Python中的元類編程入門指引

    Python中的元類編程入門指引

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

    Python發(fā)送網絡請求(requests)

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

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

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

    解讀dataframe中有關inf的處理技巧

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

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

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

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

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

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

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

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

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

    Python3使用PySynth制作音樂的方法

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

    PythonWeb項目Django部署在Ubuntu18.04騰訊云主機上

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

最新評論