Expando 클래스

참고: 새로운 애플리케이션을 빌드하는 개발자는 NDB 클라이언트 라이브러리를 사용하는 것이 좋습니다. NDB 클라이언트 라이브러리는 이 클라이언트 라이브러리와 비교할 때 Memcache API를 통한 자동 항목 캐싱과 같은 여러 이점이 있습니다. 현재 이전 DB 클라이언트 라이브러리를 사용 중인 경우 DB에서 NDB로의 마이그레이션 가이드를 참조하세요.

Expando 클래스는 속성이 동적으로 결정되는 데이터 모델 정의의 상위 클래스입니다. Expando 모델에서는 런타임 시 항목에 할당되는 동적 속성 및 Model과 유사한 고정 속성을 조합할 수 있습니다.

Expandogoogle.appengine.ext.db 모듈에서 제공됩니다.

Expando는 Model의 서브클래스이며 해당 클래스에서 클래스와 인스턴스 메서드를 상속받습니다. Expando 클래스는 메소드를 정의하거나 재정의하지 않습니다.

소개

Expando 모델에는 고정 속성과 동적 속성이 있을 수 있습니다. 고정 속성은 Model 속성과 유사하게 동작하며 Expando 모델 클래스에서 클래스 속성을 사용하여 유사하게 정의됩니다. 동적 속성은 값이 인스턴스에 할당될 때 생성됩니다. 동일한 Expando 클래스의 두 인스턴스가 서로 다른 동적 속성 집합을 가질 수 있으며, 이름이 같지만 유형은 다른 동적 속성을 가질 수도 있습니다. 동적 속성은 항상 선택사항이며 기본값이 없습니다. 또한 값이 할당될 때까지 존재하지 않습니다.

동적 속성은 속성 인스턴스를 사용하여 검증을 수행하거나, 기본값을 설정하거나, 자동 논리를 값에 적용할 수 없습니다. 동적 속성에는 지원되는 데이터 저장소 유형 값만 저장됩니다. 유형 및 속성 클래스를 참조하세요.

고정 속성과 달리 동적 속성은 클래스 속성과 데이터 저장소 속성 이름으로 다른 이름을 사용할 수 없습니다. 허용되지 않는 속성 이름을 참조하세요.

팁: Property 클래스를 사용하여 동적 속성 값 유효성을 검사하려면 Property 클래스를 인스턴스화하고 값에서 validate() 메서드를 호출하면 됩니다.

Expando 하위 클래스는 Model 클래스와 유사한 고정 속성을 정의할 수 있습니다. Expando의 고정 속성은 Model의 속성과 유사하게 동작합니다. Expando 인스턴스에는 고정 속성과 동적 속성이 모두 있을 수 있습니다.

import datetime

from google.appengine.ext import db

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 crazy.last_minute_note

생성자

Expando 클래스 생성자는 다음과 같이 정의됩니다.

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

사용하기 전에 클래스에서 속성을 정의할 필요가 없는 모델 클래스입니다. Model과 마찬가지로 Expando 클래스에서 데이터 항목 종류를 정의하려면 하위 클래스로 처리해야 합니다.

Expando는 Model의 하위 클래스이며 해당 메소드를 상속하거나 재정의합니다.

인수

parent
새 항목의 상위 요소인 항목의 모델 인스턴스 또는 키 인스턴스입니다.
key_name

새 항목의 이름입니다. 이름은 기본 키에 포함됩니다. None인 경우 시스템에서 생성된 ID가 키에 사용됩니다.

key_name 값은 숫자로 시작해서는 안 되고 __*__ 형식이 아니어야 합니다. 애플리케이션이 사용자가 제출한 데이터(예: 이메일 주소)를 Datastore 항목 키 이름으로 사용하는 경우 이러한 요구사항을 충족하기 위해 애플리케이션이 먼저 'key:'과 같이 알려진 문자열을 접두사로 추가하여 값을 처리해야 합니다.

key_name은 ASCII 텍스트로 변환된 str 값이 있는 유니코드 문자열로 저장됩니다.

**kwds
인스턴스 속성의 초기 값이며 키워드 인수로 사용됩니다. 각 이름은 새 인스턴스의 속성과 일치하며 Expando 클래스에서 정의된 고정 속성과 일치하거나 동적 속성일 수 있습니다.