0
我正在Python中编写Google Appengine应用程序。该应用程序确实通过谷歌云端点消息接收和发送数据。下面你会找到一个数据库模型定义的例子。 Object包含所有对象,ObjectBoolean只是布尔值,ObjectInteger只是整数。所有的类都定义了两个方法:message_to_model()和model_to_message()。父类的Python扩展方法
如何重新使用子类中的方法?我想摆脱重复代码,如:
self.name = request.name
self.description = request.description
self.created = request.created
self.modified = request.modified
这些字段是对象类的一部分。但在我的代码中,这些字段也列在子类中,这是我想要避免的。我怎样才能做到这一点?我已经检查过super()函数,但我认为这不适合我的情况,因为我不想执行我想要扩展它的方法。
干杯
-Luca。
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
您好,请多多指教。它看起来像polymodel.PolyModel是一个新的风格类。我确实按照你所描述的方式添加了代码,它确实有效。那么model_to_message()呢? “返回”还有可能吗?或者我会不得不重写它来存储消息的一部分? – decurgia
如果可以通过构造函数的另一种方式将ObjectBooleanMessage传递给ObjectReposeMessage,那么可以再次使用super来调用Object.model_to_message,将ObjectBooleanMessage添加到结果中,然后将其返回。或者,您可以为Object.model_to_message指定第二个kwargs参数,并将这些参数传递给ObjectBooleanMessage。 ObjectBoolean.message_to_model可以用关键字参数调用Object.model_to_message:boolean = ObjectBooleanMessage(...) – spkersten