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

Python中有没有比dir()更好的对象属性类型查询工具?

增强版对象属性分类查询解决方案

原生实现方案

不需要依赖第三方包,搭配Python标准库inspect模块就可以对dir()返回的属性名做分类标注:

  • 先遍历dir()返回的所有属性名,用getattr(目标对象, 属性名)拿到对应的属性实体
  • 用以下方法做类型区分:
    • 调用inspect.ismethod(属性)或inspect.isfunction(属性)判断是否为方法
    • 调用callable(属性)为False的判定为普通变量属性
    • 对比属性名是否存在于目标对象.__dict__中,不存在即可判定为继承来的属性
    • 调用inspect.isdatadescriptor(属性)可判定是否为property类描述符属性

示例代码片段:

import inspect
def enhanced_dir(obj):
    res = {"方法": [], "普通变量": [], "继承属性": []}
    self_attrs = set(obj.__dict__.keys())
    for attr_name in dir(obj):
        # 过滤魔法方法可自行调整判断逻辑
        if attr_name.startswith("__") and attr_name.endswith("__"):
            continue
        attr = getattr(obj, attr_name)
        if attr_name not in self_attrs:
            res["继承属性"].append(attr_name)
        elif inspect.ismethod(attr) or inspect.isfunction(attr):
            res["方法"].append(attr_name)
        else:
            res["普通变量"].append(attr_name)
    return res

第三方工具方案

如果不想自己写封装,可以直接用现成的第三方包:

  • dir2:专门针对原生dir做增强的轻量工具,直接返回带分类标注的字典,默认自动区分实例方法、类方法、静态方法、实例变量、类变量、继承属性等多个类别,调用方式和原生dir一致,传入目标对象即可
  • inspect-utils:封装了更丰富的内省工具,除了基础分类外,还可以标注属性的访问权限、是否为魔法方法、继承自哪个父类等额外信息
  • rich-inspect:如果需要可视化输出分类结果,可以用这个包实现带颜色高亮的分类属性打印,调试时可读性更高

内容的提问来源于stack exchange,提问作者Burnt Umber

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 10:54:01