句法好處很重要。畢竟,OOP語言中的所有類都只是該語言的語法優勢。
在你的例子中,非常粗略地實現了無元類形式的實現,你在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
只是要求通過定義對象和工廠邏輯來實現。這裏帶有用metaclasses來隱藏工廠與用戶的Python。這很酷,因爲它讓初學者更少思考。
好吧是它的語法糖四處都是關於使易於使用的API。
是的,可以不使用Metaclasses/BoundField或其他任何東西。最後,它是可以寫的形式執行所有功能於一體,並有一個大字典全部定義(或XML?)但是那將是易於使用,易於理解,易於擴展?
來源
2011-03-30 08:07:01
Ski
對於我所做的最重要的一點是......「表格只是要求通過定義對象和工廠邏輯來實現。在這裏,帶有其元類隱藏來自用戶的工廠蟒蛇。」 我想我在想,如果API相同的抽象水平可以在沒有元類來完成,但元類是清潔和隱藏對最終用戶有很多細節(和因爲他們是在源代碼中隱藏起來,用戶真正對細節沒有太多打擾)。感謝您花時間回答問題。 – 2011-03-30 14:02:58