Python打印对象所有属性和值的方法小结

 更新时间:2025年06月17日 11:18:23   作者:1010n111  
在Python开发过程中,调试代码时经常需要查看对象的当前状态,也就是对象的所有属性和对应的值,然而,Python并没有像PHP的print_r那样直接提供一个内置函数来实现这一功能,不过,Python提供了一些工具和方法,可以组合使用来达到打印对象属性和值的目的,下面小编给大家讲讲

Python中打印对象所有属性和值的方法

实现步骤

1. 使用vars()和pprint()

vars()函数返回对象的__dict__属性,pprint()可以对数据进行美观的打印。

from pprint import pprint

class MyClass:
    def __init__(self):
        self.name = 'John'
        self.age = 30

obj = MyClass()
pprint(vars(obj))

2. 使用dir()和getattr()

dir()函数返回对象的所有属性名,getattr()函数根据属性名获取属性值。

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. 自定义函数过滤属性

可以编写自定义函数,过滤掉一些不需要的属性,如私有属性和方法。

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()函数报错

vars()函数要求对象有__dict__属性,如果对象没有该属性,会抛出TypeError异常。例如,set对象就没有__dict__属性。

s = {1, 2, 3}
try:
    pprint(vars(s))
except TypeError as e:
    print(f"Error: {e}")

2. dir()函数返回过多属性

dir()函数会返回对象的所有属性,包括内置属性和方法,可能会导致输出过多不必要的信息。可以通过自定义函数过滤这些属性。

3. 递归打印问题

如果对象包含嵌套对象,直接打印可能无法显示嵌套对象的详细信息。可以使用递归函数或第三方库来实现递归打印。

以上就是Python打印对象所有属性和值的方法小结的详细内容,更多关于Python打印对象所有属性和值的资料请关注脚本之家其它相关文章!

相关文章

  • django中嵌套的try-except实例

    django中嵌套的try-except实例

    这篇文章主要介绍了django中嵌套的try-except实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • 解决tensorflow读取本地MNITS_data失败的原因

    解决tensorflow读取本地MNITS_data失败的原因

    这篇文章主要介绍了解决tensorflow读取本地MNITS_data失败的原因,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • Python使用pip通过命令设置国内镜像源的三种方式

    Python使用pip通过命令设置国内镜像源的三种方式

    在使用 pip 安装 Python 模块时,默认的国外镜像源可能会导致下载速度缓慢甚至超时,为了解决这个问题,可以使用国内的镜像源来加速下载,以下是常用的国内镜像源以及临时和永久的配置方法,需要的朋友可以参考下
    2025-08-08
  • python脚本使用阿里云slb对恶意攻击进行封堵的实现

    python脚本使用阿里云slb对恶意攻击进行封堵的实现

    这篇文章主要介绍了python脚本使用阿里云slb对恶意攻击进行封堵的实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Python基于hashlib模块的文件MD5一致性加密验证示例

    Python基于hashlib模块的文件MD5一致性加密验证示例

    这篇文章主要介绍了Python基于hashlib模块的文件MD5一致性加密验证,涉及Python使用hashlib模块进行字符串与文件的MD5加密验证操作相关实现技巧,需要的朋友可以参考下
    2018-02-02
  • Python自动巡检H3C交换机实现过程解析

    Python自动巡检H3C交换机实现过程解析

    这篇文章主要介绍了Python自动巡检H3C交换机实现过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • Python虚拟环境virtualenv安装的详细教程保姆级(Windows和linux)

    Python虚拟环境virtualenv安装的详细教程保姆级(Windows和linux)

    本文详细介绍了如何在Linux和Windows系统上安装和配置virtualenv虚拟环境,包括依赖包安装、系统环境变量设置、激活和退出环境,以及在PyCharm中的应用和导出依赖文件,需要的朋友可以参考下
    2024-09-09
  • 详解基于python的图像Gabor变换及特征提取

    详解基于python的图像Gabor变换及特征提取

    这篇文章主要介绍了基于python的图像Gabor变换及特征提取,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2020-10-10
  • 深人了解Python上下文管理器

    深人了解Python上下文管理器

    这篇文章主要为大家介绍了Python上下文管理器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助<BR>
    2021-12-12
  • Python OpenCV实现图像傅里叶变换

    Python OpenCV实现图像傅里叶变换

    傅里叶变换,也称作傅立叶变换,表示能将满足一定条件的某个函数表示成三角函数(正弦和/或余弦函数)或者它们的积分的线性组合。本文将介绍如何通过OpenCV实现图像的傅里叶变换,需要的可以参考一下
    2022-01-01

最新评论