Добавление предоставленного пользователем свойства (во время выполнения) в экземпляр класса Expando в Google App Engine?

Создавая модели хранилища данных, наследуемые от класса Expando, я могу придать объектам/экземплярам моделей динамические свойства. Это отлично! Но я хочу, чтобы имена этих динамических свойств определялись во время выполнения. Это возможно?

Например,

class ExpandoTest (db.Expando):
 prop1 = db.StringProperty()
 prop2 = db.StringProperty()

entity_one = ExpandoTest()
entity_two = ExpandoTest()

# what I do not want
entity_one.prop3 = 'Demo of dynamic property'

# what I want
entity_two.<property_name_as_entered_by_user_at_runtime> = 'This
property name was entered by the user, Great!!'

Это возможно? Если да, то как? Я уже пробовал несколько способов сделать это, но не удалось.

Заранее спасибо.


person Sumeet Pareek    schedule 14.04.2009    source источник


Ответы (2)


Обычно мы используем функцию setattr напрямую.

setattr( entity_two, 'some_variable', some_value )
person S.Lott    schedule 14.04.2009

Только что нашел решение своего вопроса. Это было действительно просто, но, поскольку я новичок в python, я опубликовал вопрос, который вы видите выше.

Для примера кода, который я использовал, нужно сделать следующее:

entity_two.__setattr(some_variable, some_value) #where some_variable is populated by user at runtime :)
person Sumeet Pareek    schedule 14.04.2009
comment
Ответ С.Лотта правильный; вы не должны вызывать __setattr__ напрямую. - person Nick Johnson; 28.11.2011