3

我正在尝试从 webpy 框架继承 web.form.Form 以更改行为(它从表格中呈现)。我试过这样做:

class SyssecForm(web.form.Form):

            def __init__(self, *inputs, **kw): 
                super(SyssecForm, self).__init__(*inputs, **kw)

            def render(self):
                out='<div id="form"> '
                for i in self.inputs:
                    html = utils.safeunicode(i.pre) + i.render() + self.rendernote(i.note) + utils.safeunicode(i.post)
                    out +=  "%s"%(html)  
                    out +=  '"<div id="%s"> %s %s</div>'% (i.id, net.websafe(i.description), html)
                out+= "</div>"
                return out

现在我收到此错误object.__init__() takes no parameters

错误回溯

4

3 回答 3

3

只需__init__完全删除您的方法,因为无论如何您实际上并没有在那里做任何事情。

于 2012-04-15T19:49:56.913 回答
2

该消息告诉您所有您需要知道的信息。超类是对象,它的构造函数不带参数。所以不要将构造函数的参数传递给它,因为它不知道如何处理它们。

像这样称呼它:

super(SyssecForm, self).__init__()
于 2012-04-15T19:45:30.477 回答
1

这对我有用(web.py 0.37):

import web

class SyssecForm(web.form.Form):

    def __init__(self, *inputs, **kw): 
        super(SyssecForm, self).__init__(*inputs, **kw)

    def render(self):
        out='<div id="form"> '
        for i in self.inputs:
            html = web.utils.safeunicode(i.pre) + i.render() + self.rendernote(i.note) + web.utils.safeunicode(i.post)
            out +=  "%s"%(html)  
            out +=  '"<div id="%s"> %s %s</div>'% (i.id, web.net.websafe(i.description), html)
        out+= "</div>"
        return out

form = SyssecForm(web.form.Textbox("test"))
print form.render()

您的问题是因为您可能已经过时 web.py,因为 web.form.Form 从object现在继承:https ://github.com/webpy/webpy/commit/766709cbcae1369126a52aee4bc3bf145b5d77a8

Super 仅适用于新式课程。您必须像这样添加object类声明:class SyssecForm(web.form.Form, object):或者您必须更新 web.py。

于 2012-04-16T07:56:04.720 回答