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

如何让Python类支持vars()方法以动态获取类属性字典?

解决方法

默认情况下,vars(myclass)会返回类的完整__dict__,其中包含__module__、__doc__这类Python自动添加的内置属性。要得到仅包含你自定义属性的字典,且支持动态新增属性时自动包含,最简单的方式是过滤掉双下划线包裹的内置属性:

方式一:即时生成目标字典

直接通过字典推导式过滤vars()的结果,这种方式完全动态,新增类属性后无需修改代码:

class myclass:
    a_a = "a---a"
    b_b = "b---b"

# 生成仅包含自定义属性的字典
custom_attr_dict = {k: v for k, v in vars(myclass).items() if not (k.startswith('__') and k.endswith('__'))}
print(custom_attr_dict)
# 输出: {'a_a': 'a---a', 'b_b': 'b---b'}

如果后续给myclass新增属性:

myclass.c_c = "c---c"

再次执行推导式,会自动包含新属性:

print({k: v for k, v in vars(myclass).items() if not (k.startswith('__') and k.endswith('__'))})
# 输出: {'a_a': 'a---a', 'b_b': 'b---b', 'c_c': 'c---c'}

方式二:封装成类方法(更易用)

如果需要频繁获取自定义属性字典,可以给类添加一个类方法,调用更便捷:

class myclass:
    a_a = "a---a"
    b_b = "b---b"

    @classmethod
    def get_custom_attrs(cls):
        return {k: v for k, v in vars(cls).items() if not (k.startswith('__') and k.endswith('__'))}

# 调用示例
print(myclass.get_custom_attrs())
# 新增属性后直接调用
myclass.d_d = "d---d"
print(myclass.get_custom_attrs())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.12 20:32:21