Mis favoritos | Español | Acceder

La clase Expando

La clase Expando es una superclase de definiciones de modelos de datos cuyas propiedades se determinan de forma dinámica. Un modelo Expando puede incluir una combinación de propiedades fijas similares a Model y propiedades dinámicas asignadas a una entidad en el tiempo de ejecución.

La clase Expando se proporciona a través del módulo google.appengine.ext.db.

Expando es una subclase de Model y hereda su clase y los métodos de instancia de dicha clase. La clase Expando no define ni sobrescribe ningún método.

Introducción

Un modelo Expando puede presentar propiedades fijas y propiedades dinámicas. Las propiedades fijas se comportan de forma similar a las propiedades de la clase Model y se definen de forma similar en la clase de modelo Expando mediante atributos de clase. Las propiedades dinámicas se crean cuando se les asignan valores en la instancia. Dos instancias de la misma clase Expando pueden incluir distintos conjuntos de propiedades dinámicas e incluso pueden contener propiedades dinámicas con el mismo nombre y distinto tipo. Las propiedades dinámicas siempre son opcionales y no presentan ningún valor predeterminado: no existen hasta que se les asigna un valor.

Las propiedades dinámicas no pueden utilizar instancias de Property para llevar a cabo una validación, establecer valores predeterminados o aplicar la lógica automática a valores. Las propiedades dinámicas únicamente almacenan valores de los tipos de almacenes de datos compatibles. Consulta Tipos y clases de propiedades.

A diferencia de las propiedades fijas, las propiedades dinámicas no pueden utilizar un nombre distinto para el nombre de propiedad de almacén de datos y el atributo de clase. Consulta Nombres de propiedades no permitidos.

Sugerencia: si deseas validar un valor de propiedad dinámica con una clase Property, puedes crear una instancia de la clase Property y ejecutar su método validate() en el valor.

Una subclase Expando puede definir propiedades fijas de forma similar a una clase Model. Las propiedades fijas de una clase Expando se comportan de forma similar a las propiedades de una clase Model. Una instancia de Expando puede presentar propiedades fijas y dinámicas simultáneamente.

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

Las propiedades dinámicas (no fijas) de una instancia de Expando se pueden eliminar. Para eliminar una propiedad dinámica, una aplicación elimina el atributo de la instancia:

del myobj.myprop

Constructor

El constructor de la clase Expando se define del siguiente modo:

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

Una clase de modelo cuyas propiedades no se tienen que definir en la clase antes de su uso. Al igual que con la clase Model, se debe establecer una subclase de la clase Expando para definir el tipo de las entidades de datos.

Expando es una subclase de Model, por lo que hereda o sobrescribe sus métodos.

Argumentos:

parent
La instancia de Model o la instancia de Key para la entidad que representa la entidad principal de la nueva entidad.
key_name

El nombre de la nueva entidad. El nombre forma parte de la clave principal. Si es igual a None, se utilizará una ID generada por el sistema como clave.

El valor de key_name no debe comenzar por un número y no debe tener el formato __*__. Si tu aplicación utiliza datos enviados por el usuario como nombres de claves de entidades del almacén de datos (por ejemplo, una dirección de correo electrónico), la aplicación deberá depurar el valor en primer lugar. Una forma de hacerlo sería, por ejemplo, añadirle una cadena conocida como prefijo, como "key:", que cumpla estos requisitos.

key_name se almacena como una cadena de Unicode, con los valores str convertidos a texto ASCII.

**kw
Valores iniciales de las propiedades de la instancia, como argumentos de palabra clave. Cada nombre se corresponde con un atributo de la nueva instancia y puede corresponderse con propiedades fijas definidas en la clase Expando o con propiedades dinámicas.