My favorites | Português | Sign in

A classe Expando

A classe Expando é uma superclasse para definições de modelo de dados cujas propriedades são determinadas dinamicamente. Um modelo Expando pode ter uma combinação de propriedades fixas semelhantes a Model e propriedades dinâmicas atribuídas a uma entidade na execução.

Expando é fornecida pelo módulo google.appengine.ext.db.

Expando é uma subclasse de Model e herda seus métodos de classe e instância dessa classe. A classe Expando não define ou ignora qualquer método.

Introdução

Um modelo Expando pode ter propriedades fixas e dinâmicas. As propriedades fixas se comportam de modo semelhante às propriedades de Model e são definidas de maneira semelhante na classe de modelo Expando, utilizando-se atributos de classe. As propriedades dinâmicas são criadas quando recebem valores da instância. Duas instâncias da mesma classe Expando podem ter conjuntos diferentes de propriedades dinâmicas e podem até mesmo ter propriedades dinâmicas com o mesmo nome mas com tipos diferentes. As propriedades dinâmicas são sempre opcionais e não possuem valor padrão. Elas não existem até receberem um valor.

As propriedades dinâmicas não podem utilizar instâncias de Property para executar validação, definir padrões ou aplicar lógica automática aos valores. As propriedades dinâmicas simplesmente armazenam valores dos tipos de armazenamento de dados suportados. Consulte Tipos e classes Property.

Diferente das propriedades fixas, as propriedades dinâmicas não podem usar um nome diferente para o atributo de classe e o nome da propriedade do armazenamento de dados. Consulte Nomes de propriedade não permitidos.

Dica: Se desejar validar um valor de propriedade dinâmica utilizando uma classe Property, você pode instanciar a classe Property e chamar seu método validate() para o valor.

Uma subclasse Expando pode definir propriedade fixas semelhantes a uma classe Model. As propriedades fixas de Expando se comportam de um modo semelhante às propriedades de Model. Uma instância de Expando pode ter propriedades fixas e dinâmicas.

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.')

As propriedades dinâmicas (não fixas) da instância de Expando podem ser excluídas. Para excluir uma propriedade dinâmica, o aplicativo exclui o atributo da instância:

del myobj.myprop

Construtor

O construtor da classe Expando é definido como é mostrado abaixo:

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

Uma classe de modelo cujas propriedades não precisam ser definidas na classe antes do uso. Assim como Model, a classe Expando deve ter subclasses para definir o tipo das entidades de dados.

Expando é uma subclasse de Model e herda ou ignora seus métodos.

Argumentos:

parent
A instância de Model ou de Key para a entidade que é pai da nova entidade.
key_name

O nome da nova entidade. O nome se torna parte da chave principal. Se None, é usado um ID gerado pelo sistema para a chave.

O valor de key_name não deve começar com um número e não deve ter o formato __*__. Se seu aplicativo utiliza dados enviados pelo usuário como nomes de chave de entidade do armazenamento de dados (como um endereço de e-mail), o aplicativo deve limpar o valor primeiro, por exemplo, colocando como prefixo uma string conhecida como "key:", para atender a estes requisitos.

Um key_name é armazenado como string Unicode, com os valores de str convertidos em texto ASCII.

**kw
Valores iniciais das propriedades da instância, como argumentos de palavra-chave. Cada nome corresponde a um atributo da nova instância e pode corresponder às propriedades fixas definidas na classe Expando ou ser propriedades dinâmicas.