如何在Python中的同一个类中的方法之间传递变量

时间:2014-04-14 04:01:25

标签: python python-2.7 jinja2

我认为我没有正确使用类变量。在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 :(得分:0)

您可以使用__init__魔法

class ClientFormPage(PageHandler):
    def __init__(self):
        self.active_form = 'f1_form'

这将允许您拥有实例特定属性,而不是原始代码中的类属性。

关于差异的快速演示:

Python - why use "self" in a class?

答案 1 :(得分: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 }}" >

答案 2 :(得分: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方法初始化类。辅助函数只保存一些变量/数据/属性,并在调用它时将它们释放到其他方法。这里jsonInputFile是一些json。 checkHostname是一个写入某个设备/服务器并检查主机名的方法,但它需要ip,用户名和密码,并通过调用helper方法提供。

相关问题