[英]Python extend method of parent class
我正在用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()函數,但我認為這不適合我的情況,因為我不想執行我想擴展它的方法。
干杯
-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
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
是一個新的樣式類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.