我正在Google App Engine中製作購物車應用程序。我有一個從基本處理程序派生出許多類:Python:子類可以重載繼承的方法嗎?
class BaseHandler(webapp.RequestHandler):
def get(self, CSIN=None):
self.body(CSIN)
這是否意味着每一個派生類的body()
方法需要有同樣的說法?這很麻煩。只有一個後代實際上使用該參數。那麼當我添加新的參數時呢?我是否需要通過並改變每一堂課?
class Detail(BaseHandler):
def body(self, CSIN):
class MainPage(BaseHandler):
def body(self, CSIN=None): #@UnusedVariable
class Cart(BaseHandler):
def body(self, CSIN): #@UnusedVariable
確實,也許你是對的。我還可以如何訪問這些數據? – 2010-03-08 00:52:43
在調用'body'之前,get可以做'self.CSIN = CSIN',以及任何其他需要的屬性。如果需要的話,處理程序可以讀取'self.CSIN',如果不需要,則不會。只有在CSIN真的是整個請求的一個屬性時才能做到這一點,但不僅僅是這個*特殊*調用body的屬性。如果你可能在同一個處理程序對象上使用不同的CSIN值對'body'進行多次調用,那麼它不是處理程序的屬性,它確實是一個函數參數。否則,如果它使事情乾淨地工作,則可以將所需的任何數據粘貼到處理程序上。 – 2010-03-08 00:58:15
...另一種選擇是讓BaseHandler根據實際需要調用不同的方法。有時你會意識到你已經試圖將太多特殊情況塞進一個抽象概念中,而真正的「身體」在其所有的化身中並沒有達到同樣的目的。這可能不是這種情況,如果唯一的區別是是否需要CSIN來渲染身體,但是如果讓事情失控,它可能會在那裏結束。 – 2010-03-08 01:02:34