Google Code 提供下列語言介面: English - Español - 日本語 - 한국어 - Português - Pусский - 中文(简体) - 中文(繁體)
Expando 類別是資料模型 (其屬性是動態決定) 定義的超級類別。 Expando 模型可以是下例的組合:類似 Model 的固定屬性以及在執行階段所指派的動態屬性。
Expando 是由 google.appengine.ext.db 模組所提供。
Expando 是 Model 的子類別,並從該類別繼承其類別和實例方法。Expando 類別不會定義或覆寫任何方法。
Expando 模型可具有固定和動態屬性。固定屬性行為會類似 Model 的屬性,且同樣地使用類別屬性 (attribute) 在 Expando 模型中定義。在實例中將值指派給動態屬性時,就會建立該動態屬性。相同 Expando 類別的兩個實例,可以具有不同的動態屬性集,而且甚至可以具有相同名稱但不同類型的動態屬性。動態屬性是選用的,而且沒有預設值:指派值之後,動態屬性才會存在。
動態屬性不能使用 Property 實例來執行驗證、設定預設或為值套用自動邏輯。動態屬性只會儲存支援資料存放區類型的值。請參閱類型和 Property 類別。
另外,與固定屬性不同的是,動態屬性不能為類別屬性 (attribute) 和資料存放區屬性使用不同的名稱。請參閱不允許的屬性名稱。
提示:若要使用 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 實例的動態 (非固定) 屬性可以被刪除。若刪除動態屬性,則應用程式會刪除實例的屬性 (attribute):
del myobj.myprop
Expando 類別的建構函式定義如下:
模型類別的屬性,在使用之前,不需要在類別中定義。就像 Model,Expando 類別必須是子類別,以定義資料實體的種類。
Expando 是 Model 的子類別,並繼承或覆寫其方法。
引數:
新實體的名稱。名稱會成為主要金鑰的一部分。若為 None,則會使用系統產生的 ID 做為金鑰。
key_name 值的開頭不能是數字,而且不能是 (__*__) 型式。 若您的應用程式以使用者提交的資料做為資料存放區實體金鑰名稱 (例如電子郵件地址),則應用程式要先處理好該值,例如加上已知字串的首碼 (像是「key:」),以符合這些要求。
key_name 會儲存為 Unicode 字串,而 str 值會轉換為 ASCII 文字。