You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何在一行打印对象所有属性?print obj无法输出全部属性

在Python一行内打印对象的所有属性

嘿,这个问题我太懂了!直接用print(obj)确实只能输出对象的默认字符串表示——要么是模糊的类名加内存地址,要么是类自定义的__str__返回值,根本看不到对象的全部属性细节。下面给你几个实用的一行实现方案,按需选就行:

方案1:通用型(适用于所有对象)

用dir()遍历所有属性名,结合getattr()获取对应值,再用字典推导式打包后打印:

print({attr: getattr(obj, attr) for attr in dir(obj) if not attr.startswith('__')})
  • 解释:dir(obj)会列出对象的所有属性、方法名;if not attr.startswith('__')是过滤掉双下划线开头的魔法属性(比如__init__、__dict__),如果想连魔法属性一起看,去掉这个条件就行。
  • 进阶:如果只想看数据属性(排除方法这类可调用对象),可以再加个过滤条件:
    print({attr: getattr(obj, attr) for attr in dir(obj) if not attr.startswith('__') and not callable(getattr(obj, attr))})
    

方案2:简洁型(适用于带__dict__的对象)

如果是自定义类的实例,或者有__dict__属性的对象,直接用vars()函数一步到位:

print(vars(obj))
  • 解释:vars(obj)直接返回对象的__dict__字典,里面存着实例的所有自定义属性,代码超级简洁。但要注意,像list、str这类内置类型没有__dict__,这个方法就不适用。

方案3:格式化输出型(属性太多时更清晰)

如果对象属性很多,普通打印会挤成一团,用pprint模块格式化输出,一行搞定导入加调用:

from pprint import pprint; pprint({attr: getattr(obj, attr) for attr in dir(obj) if not attr.startswith('__')})

或者结合vars()(适用时):

from pprint import pprint; pprint(vars(obj))
  • 解释:pprint会自动把字典格式化成换行缩进的结构,可读性强很多。

举个实际例子验证下:

class Person:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def say_hi(self):
        print(f"Hi, I'm {self.name}")

p = Person("Alice", 25)

用方案1打印会得到:{'age': 25, 'name': 'Alice', 'say_hi': <bound method Person.say_hi of <__main__.Person object at 0x10a2b3d30>>},去掉方法过滤后就只剩数据属性了。

内容的提问来源于stack exchange,提问作者Blurry Script

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:49:25