如何在Python同一类的不同方法间传递变量

1 投票
3 回答
2020 浏览
提问于 2025-04-18 02:38

我觉得我可能没有正确使用类变量。在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'

这样你就可以为每个实例设置特定的属性,而不是像你原来的代码那样使用类属性。

下面是一个关于它们之间区别的简单演示:

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

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

撰写回答