尝试子类但获取对象.__ init __()不带参数

时间:2012-04-15 19:43:22

标签: python inheritance web.py

我正在尝试从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

error traceback

3 个答案:

答案 0 :(得分:3)

完全删除__init__方法,因为无论如何你还没有在那里做任何事情。

答案 1 :(得分:2)

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

这样称呼:

super(SyssecForm, self).__init__()

答案 2 :(得分: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现在继承自objecthttps://github.com/webpy/webpy/commit/766709cbcae1369126a52aee4bc3bf145b5d77a8

Super仅适用于新式课程。您必须在类delcaration中添加object,如下所示:class SyssecForm(web.form.Form, object):或者您必须更新web.py。