Ну, синтаксические преимущества очень важны. Ведь даже уроки на языках ООП - это всего лишь синтаксическое преимущество языка.
В вашем примере очень грубой реализации реализации форм без мета-классов вы описываете поля в Dict. Ну, возможно, вы упустили из виду, что это на самом деле SortedDict , потому что порядок полей имеет значение. Поэтому мне нужно определить список fields_order
.
Следующая большая вещь - ModelForm . Подход метакласса позволяет просто сказать, какую модель я использую и какие поля в атрибуте Meta
, и он автоматически создает и сопоставляет поля с моделью. Без подхода Metaclass мне, вероятно, пришлось бы использовать что-то вроде CreateFieldsFromModel
и 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?). Но будет ли это легко использовать, легко понять, легко расширить?