AppEngine:我可以动态创建运行时选择名称的属性(db.Expando)吗?
如果我有一个从 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()
setattr
和 getattr
是 Python 的内置函数,用来设置或获取对象上任意名称的属性。