0

Python で Google Appengine アプリを作成しています。アプリは、Google クラウド エンドポイント メッセージを介してデータを送受信します。以下に、データベース モデル定義の例を示します。Object にはすべてのオブジェクトが含まれ、ObjectBoolean はブール値のみ、ObjectInteger は整数値のみが含まれます。すべてのクラスには、message_to_model() と model_to_message() という 2 つのメソッドが定義されています。

サブクラスのメソッドを再利用するにはどうすればよいですか? 次のような繰り返しコードを取り除きたいです。

        self.name = request.name
        self.description = request.description
        self.created = request.created
        self.modified = request.modified

これらのフィールドは Object-class の一部です。しかし、私のコードでは、フィールドはサブクラスにもリストされています。これは避けたいことです。どうすればこれを達成できますか?私はすでに super() 関数をチェックしましたが、拡張したいメソッドを実行したくないので、これは私の場合には適していないと思います。

乾杯

-ルカ。

from google.appengine.ext.ndb import polymodel
from google.appengine.ext import ndb
from endpoint_messages.object import *


class Object(polymodel.PolyModel):
    name = ndb.StringProperty(required=True, verbose_name="Name")
    description = ndb.TextProperty(verbose_name="Description")
    created = ndb.DateTimeProperty(auto_now_add=True, verbose_name="Created")
    modified = ndb.DateTimeProperty(auto_now=True, verbose_name="Modified")

    def model_to_message(self):
        return ObjectResponseMessage(class_name=self._class_name(),
                                     id=self.key.integer_id(),
                                     name=self.name,
                                     description=self.description,
                                     created=self.created,
                                     modified=self.modified)

    def message_to_model(self, request):
        self.name = request.name
        self.description = request.description
        self.created = request.created
        self.modified = request.modified


class ObjectBoolean(Object):
    current = ndb.BooleanProperty(verbose_name="Current")
    target = ndb.BooleanProperty(verbose_name="Target")

    def model_to_message(self):
        return ObjectResponseMessage(class_name=self._class_name(),
                                     id=self.key.integer_id(),
                                     name=self.name,
                                     description=self.description,
                                     created=self.created,
                                     modified=self.modified,
                                     boolean=ObjectBooleanMessage(current=self.current,
                                                                  target=self.target))

    def message_to_model(self, request):
        self.name = request.name
        self.description = request.description
        self.created = request.created
        self.modified = request.modified
        if request.boolean:
            self.current = request.boolean.success
            self.target = request.boolean.target


class ObjectInteger(Object):
    current = ndb.IntegerProperty(verbose_name="Current")
    target = ndb.IntegerProperty(verbose_name="Target")

    def model_to_message(self):
        return ObjectResponseMessage(class_name=self._class_name(),
                                     id=self.key.integer_id(),
                                     name=self.name,
                                     description=self.description,
                                     created=self.created,
                                     modified=self.modified,
                                     float=ObjectIntegerMessage(current=self.current,
                                                                target=self.target))

    def message_to_model(self, request):
        self.name = request.name
        self.description = request.description
        self.created = request.created
        self.modified = request.modified
        if request.integer:
            self.current = request.integer.current
            self.target = request.integer.target
4

1 に答える 1