AppEngine: можно ли написать динамическое свойство (db.Expando) с именем, выбранным во время выполнения? - PullRequest
3 голосов
/ 16 июня 2010

Если у меня есть сущность, полученная из 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 голосов
/ 16 июня 2010

Да, вы можете. Вы просто должны установить атрибут для объекта:

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

setattr и getattr - это встроенные функции Python , используемые для установки / получения атрибутов с произвольными именами объекта.

...