お気に入り | 日本語 | ログイン

Expando クラス

Expando クラスは、プロパティを動的に指定するデータ モデル定義のスーパークラスです。Expando モデルは、Model と同等の固定プロパティと、実行時にエンティティに割り当てられた動的プロパティの両方を持つことができます。

Expandogoogle.appengine.ext.db モジュールによって提供されます。

Expando は Model のサブクラスであり、そのクラスとそのクラスのインスタンス メソッドを継承します。Expando クラスは、メソッドの定義もオーバーライドも行いません。

概要

Expando モデルは、固定プロパティと動的プロパティのどちらも持つことができます。固定プロパティは Model のプロパティと同様に動作し、Expando モデル クラスでクラス属性を使用して同様に定義されます。動的プロパティは、そのインスタンスの値を割り当てられるときに作成されます。同じ Expando クラスの 2 つのインスタンスは、異なる動的プロパティ セットを持つことができるほか、同じ名前で種類が異なる動的プロパティも持つことができます。動的プロパティはいつでもオプションであり、デフォルト値もありません。動的プロパティは、値を割り当てられるまでは存在しません。

動的プロパティは、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 クラスのコンストラクタは、次のように定義されます。

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

使用前にプロパティをクラスで定義する必要のないモデル クラス。Model と同様、データ エンティティの種類を定義するには Expando クラスのサブクラスを作成する必要があります。

Expando は Model のサブクラスであり、そのメソッドを継承またはオーバーライドします。

引数:

parent
新しいエンティティの親であるエンティティの Model インスタンスまたは Key インスタンス。
key_name

新しいエンティティの名前。この名前は主キーの一部になります。None の場合は、システムによって生成された ID がキーとして使用されます。

key_name の値は、先頭を数字にしないでください。また、__*__ という形式にしないでください。ユーザーのアプリケーションは、ユーザーが送信したデータをデータストア エンティティ キー名(メール アドレスなど)として使用するには、たとえば「key:」のような既知の文字列を前に付ける方法で、その値を最初にサニタイズして、上記の要件を満たす必要があります。

key_name は Unicode 文字列として格納され、str 値は ASCII テキストに変換されます。

**kw
インスタンスのプロパティの初期値。キーワードの引数となります。それぞれの名前は新しいインスタンスの属性と一致し、Expando クラスで定義される固定プロパティか動的プロパティになります。