0

我正在使用PersonEditHandler類中的tipfy編輯Person實體。我有 的get()和post()方法形成的,但是當我引用self.person (檢查是否得到方法發現關鍵現有的人),我得到一個 「對象沒有屬性'錯誤。正確編輯tipfy中的現有實體的方法

這是因爲我從來沒有在初始化方法來初始化它,因爲我是從RequestHandlerJinja2Mixin繼承。然而,當我重寫初始化,我得到另一個錯誤:'類型錯誤:初始化()恰恰1個參數(3給出)'

下面是代碼:

class PersonEditHandler(RequestHandler, Jinja2Mixin): 
    def __init__(self): 
     PersonEditHandler.__init__(self) 
     # ...or 'super(PersonEditHandler, self).__init__()' 
     self.person = None 

上午我因爲多重繼承而遇到麻煩?什麼是最好的 方式來編輯tipfy檢索記錄而不創建一個新的?

回答

1

我建議免收__init__和而添加類屬性:

class PersonEditHandler(RequestHandler, Jinja2Mixin): 
    person = None 

這樣,當你訪問是從來沒有被設置在一個特定的實例self一個self.person,它會推遲到類並根據需要獲得None;當你設置爲self.person時,它將根據需要將其設置在實體上。

與混入多重繼承是確定的,一般的,但它可以使有些陰暗問題__new____init__,因爲你已經注意到了(老實說,我不知道什麼在抱怨這裏接受三個參數。 ..但如果你展示完整的追溯,這將有所幫助,因爲我剛纔建議的問題更簡單;-)。

+0

謝謝,亞歷克斯。我其實已經試過了。問題在於它看起來不像Tipfy的Handlers在get()和post()方法之間持久化項目。例如,如果我得到一個實體並將其作爲self.person存儲在get中,我不能在post()中引用self.person;相反,我必須再次獲得實體。有人說我應該使用memcache來完成這個任務。我會怎麼做? – 2010-08-02 11:44:56

+1

@Wraith,這不是關於提示 - 每個GAE請求實例化一個全新的處理程序;但是在'__init__'中將'.person'設置爲'None'將會毫無用處(我現在看到它是因爲你提到「在get和post之間存在」 - 不是關於_methods_,如果你從另一個你仍然會發現一切都完好無損!,它就是成爲一個新的**實例**!)。只要知道POST中的密鑰,就可以將密鑰/人員對存儲在memcache中(在GET中)並檢查它是否存在(在POST中)。但是這個Q關注的是完全顯示錯誤的(不相關的)代碼,請問另一個! - ) – 2010-08-02 14:35:34

+0

再次感謝您的傑出答案,Alex。我在這裏發佈了一個新問題http://stackoverflow.com/questions/3392990/how-do-i-store-a-fetched-entity-in-memcache-for-app-engine – 2010-08-03 01:24:59

相關問題