谷歌应用引擎-父类的Python扩展方法



我正在用Python编写一个Google Appengine应用程序。这款应用确实通过谷歌云端点消息接收和发送数据。下面是数据库模型定义的一个示例。Object包含所有对象,ObjectBoolean只是布尔值ObjectInteger只是整数。所有的类都定义了两个方法:message_to_model()和model_to_message()。

如何在子类中重用方法?我确实想摆脱重复的代码,如:

        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

super()可用于此。您可以在ObjectBoolean:

中使用这样的内容
def message_to_model(self, request):
    super(ObjectBoolean, self).message_to_model(request)
    if request.boolean:
        self.current = request.boolean.success
        self.target = request.boolean.target

要做到这一点,Object必须是一个新的样式类,如果polymodel.PolyModel是一个新的样式类,它是

最新更新