4

Pythonで「列挙型」を表現するにはどうすればよいですか? Pythonで列挙型を作成する方法について。ndb.Model列挙値の 1 つを受け入れたいフィールドがあります。フィールドを に設定するだけStringPropertyですか? 私の列挙型は

def enum(**enums):
    return type('Enum', (), enums)

ALPHA = enum(A="A", B="B", C="C", D="D")
4

1 に答える 1

8

これはProtoRPC Python APIで完全にサポートされており、独自に作成する価値はありません。

単純な Enum は次のようになります。

from protorpc import messages 

class Alpha(messages.Enum):
    A = 0
    B = 1
    C = 2
    D = 3

結局のところ、オブジェクトを格納するためのモジュールがndbあり、これは文書化されています.msgpropprotorpc

したがって、列挙型を保存するにAlphaは、次のようにします。

from google.appengine.ext import ndb
from google.appengine.ext.ndb import msgprop

class Part(ndb.Model):
    alpha = msgprop.EnumProperty(Alpha, required=True)
    ...

EDIT : hadwareで指摘されているように、 amsgprop.EnumPropertyはデフォルトではインデックス化されていません。そのようなプロパティに対してクエリを実行する場合は、プロパティを次のように定義する必要があります

    alpha = msgprop.EnumProperty(Alpha, required=True, indexed=True)

次に、クエリを実行します

ndb.query(Part.alpha == Alpha.B)

または 以外の値を使用しますAlpha.B

于 2013-03-21T17:44:30.837 に答える