如何自动生成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
相关产品推荐
相关产品推荐

