• Официальный сайт SDK
  • Сайт с примерами кода

Класс Expando

Класс Expando является базовым классом для определения моделей данных, свойства которых могут задаваться динамически. Модель типа Expando может состоять из комбинации статических свойств, таких же как в классе Model, и динамических, определяемых во время выполнения приложения.

Класс Expando реализован в модуле google.appengine.ext.db.

Класс Expando является потомком базового класса Model и наследует все методы этого класса. Реализация класса Expando не переопределяет какие-либо из этих методов.

Введение

Модель Expando может одновременно содержать как статические, так и динамические свойства. Статические свойства являются такими же как свойства класса Model, и определяются точно также с использованием атрибутов класса модели. Динамические свойства создаются при задании значений экземпляру модели. Два разных экземпляра модели класса Expando могут иметь различный набор динамических свойств и даже содержать динамические свойства одного имени, но разных типов данных. Динамические свойства всегда являются опциональными и не имеют значений по умолчанию: они не будут существовать, пока им не будет присвоено значение.

Динамические свойства не могут использовать экземпляры класса Property для проведения валидации значений, установки их по умолчанию или вычислению каких-либо логических условий. Эти свойства выполняют тривиальное сохранение своих значений в хранилище с использованием поддерживаемых типов данных. Смотрите раздел Классы типов свойств.

Также в отличии от статических свойств, динамические не могут использовать разные имена для атрибутов класса и связанных с ними полей в хранилище. Смотрите раздел Недопустимые имена свойств.

Подсказка: Если вы хотите производить проверку на допустимость значений для динамического свойства с помощью классов Property, вы можете создать их экземпляры и передать значение медоду validate().

Наследник класса Expando может содержать определения статических свойств подобно наследнику класса Model. Статические свойства модели Expando имеют всю ту же функциональность, что у моделей Model. Экземпляр класса Expando может иметь как статические, так и динамические свойства.

CmltcG9ydCBkYXRldGltZQpjbGFzcyBTb25nKGRiLkV4cGFuZG8pOgp0aXRsZSA9IGRiLlN0cmluZ1Byb3BlcnR5KCkKY3JhenkgPSBTb25nKHRpdGxlPSdDcmF6eSBsaWtlIGEgZGlhbW9uZCcsCmF1dGhvcj0nTHVjeSBTa3knLApwdWJsaXNoX2RhdGU9J3llc3RlcmRheScsCnJhdGluZz01LjApCmhvYm9rZW4gPSBTb25nKHRpdGxlPSdUaGUgbWFuIGZyb20gSG9ib2tlbicsCmF1dGhvcj1bJ0FudGhvbnknLCAnTG91J10sCnB1Ymxpc2hfZGF0ZT1kYXRldGltZS5kYXRldGltZSgxOTc3LCA1LCAzKSkKY3JhenkubGFzdF9taW51dGVfbm90ZT1kYi5UZXh0KCdHZXQgYSB0cmFpbiB0byB0aGUgc3RhdGlvbi4nKQo==

Динамические свойства экземпляра класса Expando (в отличии от статических) могут быть удалены. Для проведения удаления приложение выполняет удаление атрибута экземпляра класса:

CmRlbCBteW9iai5teXByb3AK=

Конструктор

Конструктор класса модели определен следующим образом:

class Expando(parent=None, key_name=None, **kw)

Является классом модели, чьи свойства не требуется обязательно определять перед использованием. Также как и для класса Model, от Expando необходимо определить класс-наследник, который задает тип объектов данных.

Класс Expando является потомком класса Model и наследует или перекрывает все его методы.

Параметры:

parent
Экземпляр модели или ключа типа Key для объекта, который будет выступать родительским по отношению к создаваемому.
key_name

Имя нового объекта. Имя становится частью его первичного ключа. Если задано None, то для ключа используется заданный системой числовой идентификатор.

Значение параметра key_name не должно начинаться с цифры и не может быть вида __*__. Если приложение использует для задания имен ключей объектов введенные пользователем данные (например, адрес электронной почты), то оно должно привести их к допустимому виду, к примеру, добавив в ним префикс, заранее удовлетворяющий системным требованиям.

Значение параметра key_name сохраняется в качестве юникод строки (с конвертацией из типа str).

**kw
Первичные значения свойств экземпляра модели, заданные именованными параметрами. Каждый параметр должен совпадать с атрибутом нового объекта и может соответствовать либо статическому, либо динамическому свойству.