AppEngine:我可以动态创建运行时选择名称的属性(db.Expando)吗?

3 投票
1 回答
596 浏览
提问于 2025-04-16 00:02

如果我有一个从 db.Expando 继承的实体,我可以通过给一个新属性赋值来创建动态属性,比如在这个例子中赋值给 "y":

class MyEntity(db.Expando):  
  x = db.IntegerProperty()  

my_entity = MyEntity(x=1)  
my_entity.y = 2  

但是假设我把动态属性的名字放在一个变量里...我该怎么做才能 (1) 读写这个属性,和 (2) 检查这个动态变量是否在实体的实例中存在呢?比如:

class MyEntity(db.Expando):  
  x = db.IntegerProperty()  

my_entity = MyEntity(x=1)  
# choose a var name:  
var_name = "z"  
# assign a value to the Dynamic variable whose name is in var_name:  
my_entity.property_by_name[var_name] = 2  
# also, check if such a property esists  
if my_entity.property_exists(var_name):  
  # read the value of the Dynamic property whose name is in var_name
  print my_entity.property_by_name[var_name]  

谢谢...

1 个回答

6

是的,你可以这样做。你只需要在这个实体上设置一个属性:

some_name = 'wee'
setattr(my_entity, some_name, 'value')
print getattr(my_entity, some_name)
my_entity.put()

setattrgetattr 是 Python 的内置函数,用来设置或获取对象上任意名称的属性。

撰写回答