如何选择带有字符串的ndb属性?

2024-06-07 04:47:02 发布

您现在位置:Python中文网/ 问答频道 /正文

像这样的数据模型

class M(ndb.Model):
    p1 = ndb.StringProperty()
    p2 = ndb.StringProperty() 
    p3 = ndb.StringProperty()

我试图用类似这样的循环来设置属性值

^{pr2}$

但我有个错误

ERROR 'M' object does not support item assignment

有没有一种方法可以在不显式定义每个属性的情况下做到这一点?在


Tags: model属性object错误error数据模型classp2
2条回答

p1、p2、p3被定义为模型的属性,模型不支持setitem或getitem访问(即模型的行为不像字典)。另一个答案建议使用setattr,这将起作用。不过,偶尔也会导致问题,这取决于您尝试使用的setattr类型。另一种选择是使用_set_value,它看起来像

for prop in M._properties.values():
    prop._set_value(newM,choice(list)

或者如果您只需要特定的属性而不是所有属性。在

^{pr2}$

另外要考虑的是,list是一个内置类型,您不应该给它赋值。在

python有一个setattr,它可以满足您的需要。在你的循环中:

setattr(newM, p, choice(list)

相关问题 更多 >