gpt4 book ai didi

python - 如何按名称设置 Python 对象的字段/成员

转载 作者:太空宇宙 更新时间:2023-11-04 10:39:07 24 4
gpt4 key购买 nike

我正在做一个简单的对象编码,它介于简单的 RESTful API 和 peewee 管理的数据存储之间。然而,这种模式不断出现(formcgi.FieldStorage() 的输出):

if form.getfirst('From'): msg.msg_from=form.getfirst('From')
if form.getfirst('To'): msg.msg_to=form.getfirst('To')
if form.getfirst('Body'): msg.msg_body=form.getfirst('Body')

当然,这很笨拙且难以维护。我更愿意做的是有这样的东西:

keyMapping = { 'From': 'msg_from',
'To': 'msg_to',
'Body': 'msg_body' }
for k, v in keyMapping:
if form.getfirst(k): msg.SET_FIELD_VALUE(v, form.getfirst(k))

显然是我找不到的 SET_FIELD_VALUE。我知道如何使用 eval 来做到这一点,但显然我宁愿避免这样做,而且我意识到实际模式实际上可能涉及某种形式的字段引用或反射 API 等,但是我也找不到任何关于如何做到这一点的信息。

最佳答案

使用setattr :

keyMapping = { 'From': 'msg_from',
'To': 'msg_to',
'Body': 'msg_body' }
for k, v in keyMapping.items():
if form.getfirst(k):
setattr(msg, v, form.getfirst(k))

顺便说一句,您应该使用items()iteritesm()。否则,迭代字典只会产生键。


setattr 的用法示例:

>>> class Klass:
... def __init__(self):
... self.a = 1
... self.b = 2
...
>>> x = Klass()
>>> setattr(x, 'a', 3)
>>> x.a
3

关于python - 如何按名称设置 Python 对象的字段/成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21808905/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com