2011-03-23 81 views
1

main.py我有一個顯示代碼重複幾次。所以我創建了一個f1.py並將代碼放在f1.py中作爲函數display(query),我將它從main.py調用爲f1.display(query)Google App Engine中的函數調用 - Python

display(query)具有行

self.response.out.write(
# some code 
) 

,我得到的錯誤信息:

self.response.out.write(
NameError: global name 'self' is not defined 

我試圖導入from google.appengine.ext import webappdisplay(query)功能內,但沒有幫助。

我在做什麼錯,我該如何解決?謝謝!

回答

3

self是傳遞給類實例方法的第一個參數的傳統名稱。當一個類實例被調用時,它會將自身的引用作爲其所有方法的第一個參數。通常的做法是命名第一個參數,例如方法self

所以,當你分解出來的你的方法的(上webapp.RequestHandler一個sublcass大概getpost)功能的一部分到其他功能,可以不再引用self並獲得response財產。

解決這個問題的最簡單方法很可能就是將希望寫入的輸出返回給函數中的響應。然後,您可以像在重構之前一樣使用方法內的函數的返回值調用self.response.out.write

+0

好的,我明白你的意思了。但我希望在功能中包含整個顯示部分。這似乎不可能。謝謝。 – Zeynel 2011-03-23 03:37:47

+1

@Zeynel你可以將'自我'傳遞給有問題的函數。或者,您可以使該函數成爲處理程序類的一個方法,而不是函數。 – 2011-03-24 00:11:22

+0

@尼克約翰遜:非常感謝! 'f1.display(query,self)'起作用。現在,知道這一點,我將能夠將我的導航代碼放在'f1'中。再次感謝。 – Zeynel 2011-03-24 04:57:48