2011-03-23 125 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