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

Python动态引用对象:批量为字典键赋值的方法问询

如何通过动态引用简化Python对象的赋值操作?

嘿,这个重复赋值的问题我太懂了,手动写一堆几乎一样的代码简直是浪费时间!咱们用动态引用的方式来彻底简化它:

首先,你需要明确每个表单字段对应的self.player属性——从你的示例来看,sex对应self.player.name,birth对应self.player.age,所以先建立一个字段和属性的映射关系(如果字段名和属性名完全一致,这一步可以省略):

# 定义表单字段到self.player属性的映射
field_to_player_attr = {
    'sex': 'name',
    'birth': 'age',
    'location': 'location',  # 假设这个字段对应player的location属性
    'politics': 'politics'   # 同理,根据实际情况调整
}

接下来,只需要循环遍历form_fields列表,用Python内置的getattr()函数动态获取属性值,再统一赋值给self.participant.vars:

form_fields = ['sex', 'birth', 'location', 'politics']

for field in form_fields:
    # 动态获取self.player对应的属性值
    player_attr_value = getattr(self.player, field_to_player_attr[field])
    # 统一赋值逻辑,无需重复写每个字段的代码
    self.participant.vars[field] = [
        Constants.fields_dict[field][0],
        Constants.fields_dict[field][1],
        player_attr_value
    ]

如果你的表单字段名和self.player的属性名完全匹配(比如sex对应self.player.sex),那代码可以更简洁,直接用字段名作为属性名:

for field in form_fields:
    player_attr_value = getattr(self.player, field)
    self.participant.vars[field] = [
        Constants.fields_dict[field][0],
        Constants.fields_dict[field][1],
        player_attr_value
    ]

这个方法的核心是getattr()函数,它能根据字符串形式的属性名动态获取对象的属性值,完美解决了手动重复赋值的冗余问题,后续如果要新增字段,只需要在form_fields列表和映射字典(如果需要)里添加即可,不用再写重复的赋值代码。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 06:30:06