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.form.Formobjectが現在から継承されているため、web.py が古くなっている可能性があるためです。

Super は、新しいスタイルのクラスでのみ機能します。object次のようにクラス宣言を追加するclass SyssecForm(web.form.Form, object):か、web.py を更新する必要があります。

于 2012-04-16T07:56:04.720 に答える