好吧,语法上的好处很重要。毕竟,即使是 OOP 语言中的类也只是该语言的语法优势。
在您非常粗略地实现无元类表单实现的示例中,您描述了字典中的字段。好吧,您可能已经忽略了它实际上是SortedDict,因为字段的顺序很重要。所以我还需要定义fields_order
列表。
下一件大事是ModelForm。元类方法允许简单地说我使用哪个模型以及Meta
属性中的哪些字段,它会自动创建字段并将其映射到模型。如果没有元类方法,我可能不得不使用类似CreateFieldsFromModel
and的东西MapFieldsToModel
。或者你可以在__init__
方法中为我这样做。但是等等,__init__
方法已经足够复杂了,有很多参数,比如data
, initial
,files
等等。
class MyForm(Form):
fields = {
'one': ...
...
}
fields_order = [...]
model_fields = ???
Class MyForm2(MyForm):
fields = MyForm.fields + {...}
# ... hey this API sucks! I think I'll go with another framework.
还有更多可以在表单中配置的东西,并且所有内容都记录在案。
所以对我来说,由于巨大的配置逻辑,它看起来Form
只是要求通过定义对象和工厂逻辑来实现。这里有 python 及其元类来向用户隐藏工厂。它很酷,因为它让初学者少思考。
好吧,是的,它的语法糖无处不在,而且它的全部内容都是为了使 API 易于使用。
是的,可以不使用 Metaclasses/BoundField 或其他任何东西。最后,可以在一个函数中编写所有表单实现,并在一个大字典(或 xml?)中定义所有定义,但这是否易于使用、易于理解、易于扩展?