Google Code предлагается на следующих языках: English – Español – 日本語 – 한국어 – Português – Pусский – 中文(简体) – 中文(繁體)
Класс Expando представляет собой суперкласс определений моделей данных, свойства которых определяются динамически. Модель Expando может обладать как фиксированными свойствами, похожими на свойства класса Model, так и динамическими, которые присваиваются объекту при выполнении кода.
Класс Expando входит в модуль google.appengine.ext.db.
Expando является подклассом класса Model и наследует его методы класса и экземпляра. Класс Expando не определяет и не переопределяет методы.
Модель Expando может содержать как фиксированные, так и динамические свойства. Фиксированные свойства ведут себя похоже на свойства класса Model и сходным образом определяются в классе модели Expando с помощью атрибутов класса. Динамические свойства создаются в момент присвоения им значений в экземпляре. Два экземпляра одного класса Expando могут обладать разным набором динамических свойств и даже динамическими свойствами с одинаковым именем и разными типами. Динамические свойства не являются обязательными, и у них нет значения по умолчанию, поскольку до присвоения значения они не существуют.
Динамические свойства не могут использовать экземпляры класса Property для проведения проверки, задания значений по умолчанию или применения к значениям автоматической логики. Динамические свойства просто хранят значения данных поддерживаемых хранилищем типов. См. статью Типы и классы Property.
В отличие от фиксированных свойств, динамические свойства не могут использовать разные названия для атрибута класса и названия свойства в хранилище данных. См. статью Запрещенные названия свойств.
Совет. Чтобы проверить значение динамического свойства с помощью класса Property, можно создать экземпляр этого класса и вызвать его метод validate() для данного значения.
Подкласс Expando может определять фиксированные свойства аналогично классу Model. Фиксированные свойства класса Expando ведут себя похоже на свойства класса Model. Экземпляр Expando может содержать как фиксированные, так и динамические свойства.
import datetime
class Song(db.Expando):
title = db.StringProperty()
crazy = Song(title='Crazy like a diamond',
author='Lucy Sky',
publish_date='yesterday',
rating=5.0)
hoboken = Song(title='The man from Hoboken',
author=['Anthony', 'Lou'],
publish_date=datetime.datetime(1977, 5, 3))
crazy.last_minute_note=db.Text('Get a train to the station.')
Динамические (нефиксированные) свойства экземпляра Expando можно удалять. Чтобы удалить динамическое свойство, приложение удаляет атрибут экземпляра:
del myobj.myprop
Конструктор класса Expando определяется следующим образом:
Класс модели, свойства которой не требуется определять в классе перед использованием. Как и для класса Model, для класса Expando необходимо создать подкласс, чтобы задать тип объектов данных.
Expando является подклассом класса Model и наследует или переопределяет его методы.
Аргументы:
Название нового объекта. Это название становится частью первичного ключа. Если значение – None, то в качестве ключа используется идентификатор, созданный системой.
Значение аргумента key_name не должно начинаться с цифры или иметь форму __*__. Если приложение использует в качестве названий ключей объектов хранилища данные, передаваемые пользователем, например адрес электронной почты, сначала оно должно проверить значение на соответствие этим требованиям и скорректировать его. Для этого можно добавить к значению определенный префикс, например строку "key:".
Значение аргумента key_name хранится в виде строки Unicode, при этом значения str преобразуются в текст ASCII.