2024-06-07 04:47:02 发布
网友
像这样的数据模型
class M(ndb.Model): p1 = ndb.StringProperty() p2 = ndb.StringProperty() p3 = ndb.StringProperty()
我试图用类似这样的循环来设置属性值
但我有个错误
ERROR 'M' object does not support item assignment
有没有一种方法可以在不显式定义每个属性的情况下做到这一点?在
p1、p2、p3被定义为模型的属性,模型不支持setitem或getitem访问(即模型的行为不像字典)。另一个答案建议使用setattr,这将起作用。不过,偶尔也会导致问题,这取决于您尝试使用的setattr类型。另一种选择是使用_set_value,它看起来像
_set_value
for prop in M._properties.values(): prop._set_value(newM,choice(list)
或者如果您只需要特定的属性而不是所有属性。在
另外要考虑的是,list是一个内置类型,您不应该给它赋值。在
list
python有一个setattr,它可以满足您的需要。在你的循环中:
setattr(newM, p, choice(list)
p1、p2、p3被定义为模型的属性,模型不支持setitem或getitem访问(即模型的行为不像字典)。另一个答案建议使用setattr,这将起作用。不过,偶尔也会导致问题,这取决于您尝试使用的setattr类型。另一种选择是使用
_set_value
,它看起来像或者如果您只需要特定的属性而不是所有属性。在
^{pr2}$另外要考虑的是,
list
是一个内置类型,您不应该给它赋值。在python有一个setattr,它可以满足您的需要。在你的循环中:
相关问题 更多 >
编程相关推荐