अच्छी तरह से वाक्य रचनात्मक लाभ बहुत मायने रखता है। ओओपी भाषाओं में भी कक्षाओं के बाद भाषा का सिर्फ एक वाक्य रचनात्मक लाभ है।
मेटा-वर्ग-कम फॉर्म कार्यान्वयन के बहुत क्रूड कार्यान्वयन के आपके उदाहरण में आप डिक्ट में फ़ील्ड का वर्णन करते हैं। खैर आपने अनदेखा किया होगा कि यह वास्तव में SortedDict है, क्योंकि फ़ील्ड मामलों का क्रम। तो मुझे fields_order
सूची को भी परिभाषित करने की आवश्यकता होगी।
अगला बड़ी बात ModelForm है। मेटा-क्लास दृष्टिकोण केवल यह कहने की अनुमति देता है कि मैं कौन सा मॉडल उपयोग करता हूं और कौन सा फ़ील्ड Meta
विशेषता में है और यह स्वचालित रूप से मॉडल को मॉडल बनाने और मानचित्र बनाता है। मेटाक्लास दृष्टिकोण के बिना मुझे शायद 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
केवल परिभाषा-वस्तु और फैक्ट्री-तर्क के माध्यम से लागू होने के लिए कहता है। और यहां उपयोगकर्ता से कारखाने को छिपाने के लिए इसके मेटाक्लास के साथ अजगर आता है। और यह अच्छा है क्योंकि यह शुरुआती लोगों को कम सोचने के लिए बनाता है।
और अच्छी तरह से इसके आसपास सिंटैक्टिकल चीनी और इसके सभी एपीआई का उपयोग करने में आसान बनाने के बारे में।
और हाँ मेटाक्लास/बाउंडफिल्ड या जो भी कुछ भी उपयोग नहीं करना संभव है।अंत में एक समारोह में रूपों के सभी कार्यान्वयन को लिखना संभव है और एक परिभाषा (या xml?) में सभी परिभाषाएं हैं, लेकिन क्या इसका उपयोग करना आसान होगा, समझने में आसान, विस्तार करना आसान होगा?
मेरे लिए आपके द्वारा सबसे महत्वपूर्ण बिंदु बनाया गया है ... "फ़ॉर्म केवल परिभाषा-वस्तु और फैक्ट्री-तर्क के माध्यम से लागू करने के लिए कहता है। और यहां उपयोगकर्ता से कारखाने को छिपाने के लिए इसके मेटाक्लास के साथ अजगर आता है।" मुझे लगता है कि मैं सोच रहा था कि एपीआई अबास्ट्रक्शन का एक ही स्तर मेटाक्लास के बिना पूरा किया जा सकता है, लेकिन मेटाक्लास क्लीनर हैं और अंतिम उपयोगकर्ता से बहुत सारे विवरण छिपाते हैं (और चूंकि वे स्रोत कोड में दूर हो जाते हैं, उपयोगकर्ता वास्तव में विवरण के बारे में ज्यादा परेशान करने की ज़रूरत नहीं है)। प्रश्न का उत्तर देने के लिए समय निकालने के लिए धन्यवाद। –