如何在Python同一类的不同方法间传递变量
我觉得我可能没有正确使用类变量。在ClientFormPage这个类里面,我把active_form初始化为'f1_form'。在我提交第一个表单之后,我想把active_form改成'f2_form',可是它总是又变回'f1_form'。有什么好的方法可以做到这一点吗?
class ClientFormPage(PageHandler):
active_form = 'f1_form'
def render_form(self, f1='hidden', f2='hidden', **kw):
self.render('clientforms.html', form1=f1, form2=f2, **kw)
def get(self):
self.render_form(f1='')
def get_form2(self):
self.render_form(f2='')
def post(self):
if self.active_form == 'f1_form':
foo = self.request.get('foo')
if not foo:
self.render_form(f1_form='', foo=foo,
foo_error='has-error has-feedback')
else:
self.active_form = 'f2_form' # This assignment is not sticking
self.get_form2()
return
if self.active_form == 'f2_form':
bar = self.request.get('bar')
if not bar:
self.render_form(f1_form='', bar=bar,
bar_error='has-error has-feedback')
else:
self.active_form = 'f3_form'
self.get_form3()
return
3 个回答
0
class myClass(object):
def __init__(self):
def helper(self, jsonInputFile):
values = jsonInputFile['values']
ip = values['ip']
username = values['user']
password = values['password']
return values, ip, username, password
def checkHostname(self, jsonInputFile):
values, ip, username, password = self.helper
print values
print '---------'
print ip
print username
print password
init方法是用来初始化这个类的。helper函数则是用来存放一些变量、数据或者属性,当你需要的时候,它会把这些东西提供给其他方法。这里的jsonInputFile是一些json格式的数据。checkHostname是一个方法,用来登录某个设备或服务器并检查主机名,但它需要IP地址、用户名和密码,而这些信息是通过调用helper方法来提供的。
0
你可以使用 __init__
这个特殊的方法。
class ClientFormPage(PageHandler):
def __init__(self):
self.active_form = 'f1_form'
这样你就可以为每个实例设置特定的属性,而不是像你原来的代码那样使用类属性。
下面是一个关于它们之间区别的简单演示:
0
如果我理解你的代码和评论没错的话,你想在不同的请求之间保持某种状态(active_form)。为了做到这一点,你需要使用 cookies。
在你的 webapp2 请求处理类中,无法在不同请求之间保存状态。每次请求都会创建一个新的处理类。
可以查看文档了解更多信息:http://webapp-improved.appspot.com/api/webapp2_extras/sessions.html
另一种方法是把你当前活动表单的名称保存在 HTML 表单的一个隐藏输入框中。
<input type="hidden" name ="active_form" value="{{ active_form }}" >