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

如何自动生成Python类属性与实例值的映射字典?

自动生成@property对应的属性字典

你的需求是自动收集类中所有@property装饰的属性,生成属性名到值的映射字典,无需手动逐个编写键值对。之前用__dir__和实例__dict__没成功,是因为@property定义的属性属于类层面的描述符,实例的__dict__仅存储私有实例变量(比如_policyDefinitionId),不会直接包含@property的名称。

下面提供两种可行的实现方式:

方法1:遍历类的__dict__筛选property对象

直接从类的__dict__中筛选出类型为property的键,再逐个从实例中获取对应的值:

class Policy:
    def __init__(self):
        self._policyDefinitionId = "value_policy_id"
        self._policyDefinitionReferenceId = "value_def_reference_id"
        self._displayName = "value_display_name"

    def some_method(self):
        pass

    @property
    def policyDefinitionId(self):
        return self._policyDefinitionId

    @property
    def displayName(self):
        return self._displayName

    @property
    def policyDefinitionReferenceId(self):
        return self._policyDefinitionReferenceId

    def get_all_properties(self) -> dict:
        # 遍历类的__dict__,筛选出所有property类型的属性
        prop_names = [name for name, obj in self.__class__.__dict__.items() 
                      if isinstance(obj, property)]
        # 生成属性名到值的字典
        return {name: getattr(self, name) for name in prop_names}

方法2:使用inspect模块(更清晰)

inspect模块提供了更直观的方式来获取类的属性,可专门筛选描述符类型:

import inspect

class Policy:
    # 其他代码保持不变...

    def get_all_properties(self) -> dict:
        # 获取类中所有property类型的成员
        props = inspect.getmembers(self.__class__, lambda obj: isinstance(obj, property))
        # 生成字典,props是(属性名, property对象)的元组列表
        return {name: getattr(self, name) for name, _ in props}

这两种方法都会自动收集所有@property装饰的属性,后续新增@property时,get_all_properties无需修改即可自动适配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 21:55:24