How to pass variables between methods in the same class in Python
我认为我没有正确地使用类变量。在clientFormPage类中,我将活动的_窗体初始化为"f1_窗体"。在我发布第一个表单后,我想将活动的_表单前进到'f2_表单',但是它会一直重置为'f1_表单'。最好的方法是什么?
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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。check hostname是一种写入某些设备/服务器并检查主机名的方法,但它需要IP、用户名和密码,并通过调用helper方法提供。
如果我很好地理解您的代码和注释,那么您需要在请求之间保留状态(活动表单)。要做到这一点,你必须使用饼干。
不能在请求之间保存webapp2请求处理程序类中的状态。为每个请求创建一个新的处理程序类。
请参阅文档:http://webapp-improved.appspot.com/api/webapp2_extras/sessions.html
另一种方法是将您的活动窗体的名称保存在HTML表单的隐藏输入中。
1 | <input type="hidden" name ="active_form" value="{{ active_form }}"> |
你可以使用
1 2 3 | class ClientFormPage(PageHandler): def __init__(self): self.active_form = 'f1_form' |
这将允许您具有特定于实例的属性,而不是像在原始代码中那样具有类属性。
差异的快速演示:
python-为什么在类中使用"self"?