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

Python AppEngine:我可以用运行时选择的名称编写动态属性(db.Expando)吗?,python,google-app-engine,properties,entity,google-cloud-datastore,Python,Google App Engine,Properties,Entity,Google Cloud Datastore,如果我有一个从db.Expando派生的实体,我可以通过给一个新属性赋值来编写动态属性,例如本例中的“y”: class MyEntity(db.Expando): x = db.IntegerProperty() my_entity = MyEntity(x=1) my_entity.y = 2 但是假设我在变量中有动态属性的名称。。。如何(1)读取和写入它,以及(2)检查实体实例中是否存在动态变量?e、 g class MyEntity(db.Expando):

如果我有一个从db.Expando派生的实体,我可以通过给一个新属性赋值来编写动态属性,例如本例中的“y”:

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

my_entity = MyEntity(x=1)  
my_entity.y = 2  
但是假设我在变量中有动态属性的名称。。。如何(1)读取和写入它,以及(2)检查实体实例中是否存在动态变量?e、 g

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]  

谢谢…

是的,你可以。您只需在实体上设置属性:

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

setattr
getattr
用于设置/获取对象上具有任意名称的属性。

非常好,谢谢!我还发现我可以使用hasattr来确定一个实体是否有动态变量。