Python中获取OOP对象特定属性及内部运行信息的方法咨询
查看Python对象内部信息的常用方法
你看到的默认打印内容是对象的__repr__方法返回的结果,如果类没有自定义这个方法,就只会输出类名+内存地址,没有实际业务属性信息。要获取更详细的内容可以用下面这些方法:
1. 查看对象所有属性和方法
- 用Python内置的
dir()函数,直接传入要查看的对象,就会返回该对象所有的属性、方法名列表:
print(dir(your_object))
- 如果要过滤掉前后带下划线的内置魔法方法/属性,只看自定义内容,可以加简单过滤:
print([attr for attr in dir(your_object) if not attr.startswith('_')])
2. 直接查看对象的属性字典
- 大部分自定义类的实例属性都会存在
__dict__属性里,直接打印就能看到所有属性名和对应的取值,非常直观:
print(your_object.__dict__)
- 如果类用了
__slots__声明属性、没有__dict__,可以遍历__slots__来逐个取属性值。
3. 查看类/方法的源码和注释
- 要了解方法的运行逻辑,可以用
inspect模块的getsource方法直接获取源码:
import inspect # 查看单个方法的源码 print(inspect.getsource(your_object.some_method)) # 查看类的完整源码 print(inspect.getsource(type(your_object)))
- 如果只要看方法/类的注释说明,用
__doc__属性即可:
print(your_object.some_method.__doc__) print(type(your_object).__doc__)
4. 更友好的结构化打印
- 用
pprint模块代替普通的print,输出的内容会自动换行缩进,嵌套结构的可读性高很多:
from pprint import pprint pprint(your_object.__dict__) pprint(dir(your_object))
- 如果是在Jupyter环境里,直接在单元格最后一行写变量名然后运行,不需要加
print,Jupyter会自动用更友好的格式展示对象信息,部分库的对象还会自带格式化的预览效果。
内容的提问来源于stack exchange,提问作者egghead jr
相关产品推荐
相关产品推荐

