Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/279.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何创建WTForms字段子类?_Python_Inheritance_Wtforms - Fatal编程技术网

Python 如何创建WTForms字段子类?

Python 如何创建WTForms字段子类?,python,inheritance,wtforms,Python,Inheritance,Wtforms,我试图从wtforms的默认字段类创建子类 class MyForm(Form): fieldName = MyField('field name') MyField是从另一个文件导入的 class MyField(TextField): def __init__(self): super(MyField, self).__init__(**kwargs) 但是,当我创建源自此处的MyForm时,会出现一些错误: In [5]: f = MyForm() --

我试图从wtforms的默认字段类创建子类

class MyForm(Form):
    fieldName = MyField('field name')
MyField是从另一个文件导入的

class MyField(TextField):
    def __init__(self):
        super(MyField, self).__init__(**kwargs)
但是,当我创建源自此处的MyForm时,会出现一些错误:

In [5]: f = MyForm()
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
path/<ipython-input-5-decc3699f7c4> in <module>()
----> 1 f = RegistrationForm()

path/wtforms/form.pyc in __call__(cls, *args, **kwargs)
    176             fields.sort(key=lambda x: (x[1].creation_counter, x[0]))
    177             cls._unbound_fields = fields
--> 178         return type.__call__(cls, *args, **kwargs)
    179 
    180     def __setattr__(cls, name, value):

path/wtforms/form.pyc in __init__(self, formdata, obj, prefix, **kwargs)
    222             of a matching keyword argument to the field, if one exists.
    223         """
--> 224         super(Form, self).__init__(self._unbound_fields, prefix=prefix)
    225 
    226         for name, field in iteritems(self._fields):

pathwtforms/form.pyc in __init__(self, fields, prefix)
     37 
     38         for name, unbound_field in fields:
---> 39             field = unbound_field.bind(form=self, name=name, prefix=prefix, translations=translations)
     40             self._fields[name] = field
     41 

path/wtforms/fields/core.pyc in bind(self, form, name, prefix, translations, **kwargs)
    299 
    300     def bind(self, form, name, prefix='', translations=None, **kwargs):
--> 301         return self.field_class(_form=form, _prefix=prefix, _name=name, _translations=translations, *self.args, **dict(self.kwargs, **kwargs))
    302 
    303     def __repr__(self):

TypeError: __init__() got an unexpected keyword argument '_form'
[5]中的
:f=MyForm()
---------------------------------------------------------------------------
TypeError回溯(最近一次调用上次)
路径/输入()
---->1 f=注册表格()
路径/wtforms/form.pyc在调用中(cls、*args、**kwargs)
176个字段。排序(key=lambda x:(x[1]。创建计数器,x[0]))
177 cls.\u未绑定\u字段=字段
-->178返回类型。调用(cls、*ARG、**kwargs)
179
180定义设置属性(cls、名称、值):
路径/wtforms/form.pyc在uuuu init_uuu中(self、formdata、obj、prefix、**kwargs)
字段的匹配关键字参数(如果存在)。
223         """
-->224 super(表单,self)。\uuuuu init\uuuuuuuu(self.\u unbound\u字段,前缀=前缀)
225
226表示iteritems中的名称字段(self.\u字段):
pathwtforms/form.pyc在_init__中(self,字段,前缀)
37
38对于名称,字段中的未绑定字段:
--->39 field=unbound\u field.bind(form=self,name=name,prefix=prefix,translations=translations)
40个字段[名称]=字段
41
绑定中的path/wtforms/fields/core.pyc(self、form、name、prefix、translations、**kwargs)
299
300 def绑定(self、form、name、prefix=''、translations=None、**kwargs):
-->301返回self.field类(_form=form,_prefix=prefix,_name=name,_translations=translations,*self.args,**dict(self.kwargs,**kwargs))
302
303定义报告(自我):
TypeError:\uuuu init\uuuuuuuuuuu()获取了意外的关键字参数“\u form”
我想_form字段没有正确实例化。 有什么办法吗?
谢谢

您的
MyField.\uuu init\uuuu
方法缺少必需的关键字args。请尝试以下操作:

class MyField(TextField):
    def __init__(self, **kwargs):  # You were missing the **kwargs
        super(MyField, self).__init__(**kwargs)
函数调用中的
**
**
运算符(?)执行以下操作:

  • 如果在函数签名中使用,则它们指定所有剩余的位置(
    *
    )或关键字(
    **
    )参数应分别放置在
    元组中,并且数据应绑定到
    *
    /
    **
    后面的名称
  • 如果在函数调用中使用,它们指定应将
    元组
    列表
    (对于
    *
    )或
    dict
    (对于
    ***
    )解包并作为参数/关键字参数列表传递给函数

您所发布的内容根本无法运行,而且最重要的是,无法生成您所述的错误(不会走那么远)。首先,您试图在定义它之前实例化
MyField
;如果您解决了这个问题,您将向它传递一个参数,但您还没有编写它来接受任何参数。这两种情况都会导致错误,而不是您在调用父类之前提到的错误。请发布实际显示的代码您询问的错误。MyField类在另一个文件中定义。我编辑了此帖子。