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
相关产品推荐
相关产品推荐

