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

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 }}">


你可以使用__init__魔法方法

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

这将允许您具有特定于实例的属性,而不是像在原始代码中那样具有类属性。

差异的快速演示:

python-为什么在类中使用"self"?