- fieldenum एक ऐसा enum है जिसमें values होती हैं (जिसे instantiate किया जा सकता है).
- यह Rust के field वाले enum को साफ़-सुथरे तरीके से सपोर्ट करता है.
- इसने functional programming की purity और Python में practicality के बीच संतुलन बनाने की कोशिश की है.
- डिफ़ॉल्ट रूप से यह
None के विकल्प के रूप में Option और exception के विकल्प के रूप में BoundResult को सपोर्ट करता है.
- यह पूरी तरह tested है.
- अभी English documentation कमज़ोर है, लेकिन इसे धीरे-धीरे बेहतर बनाने की योजना है.
- issue, PR, star जैसी विभिन्न प्रकार की मदद और support का स्वागत है.
14 टिप्पणियां
मुझे लगता है
dataclassका union type ज़्यादा बेहतर नहीं होगा? declaration छोटा होने के अलावा इसका कोई खास फायदा समझ नहीं आ रहा। क्याfieldenumकी कोई ऐसी खास बढ़त है जिससे यह बेहतर हो?घोषणा छोटी, संक्षिप्त और सिर्फ़ ज़रूरी हिस्सों तक सीमित होना भी इसका एक बड़ा फ़ायदा है।
उदाहरण के लिए,
ऊपर दिए गए fieldenum को अगर dataclass से implement करना हो, तो उसे इस तरह लिखना पड़ेगा।
कोड लंबा हो जाता है, पढ़ना भी मुश्किल हो जाता है, गलती की संभावना भी बढ़ जाती है, और यह भी नहीं लगता कि कोड बहुत साफ़-सुथरा है, है ना?
बेशक, इस तरह लिखने पर भी fieldenum द्वारा दिए जाने वाले कई दूसरे फ़ीचर (generic, repr,
__fields__, ...) नहीं मिलते।इसलिए, अगर इन सब चीज़ों को implement करके एक साथ समेटने वाला fieldenum मौजूद हो, तो यह कहीं ज़्यादा सुविधाजनक है।
इसके अलावा,
उदाहरणसेक्शन की सामग्री भी देखना उपयोगी हो सकता है।reprimplementation को support करता हैdataclasses.fieldsfield definition के बारे में runtime जानकारी देता हैtypingमॉड्यूल के जरिए 3.5 से, और syntactic sugar को 3.12 से support किया गया हैMessagesnamespace के मामले में, इसे module के रूप में implement किया जा सकता हैफिर भी, class definition के लिए ज़रूरी boilerplate code का न होना, और enum तथा class को एक ही interface के साथ इस्तेमाल कर पाना, इसके फ़ायदे हो सकते हैं। विस्तृत विवरण के लिए धन्यवाद
https://stackoverflow.com/a/47784683
इस तरह struct को व्यक्त करने की कई तरह की कोशिशें होती रही हैं, लेकिन आखिरकार इसे Python की सीमा और कमी के रूप में देखा जा सकता है। मैंने ADT (algebraic data type) से पहली बार कॉलेज की कक्षा में OCaml के जरिए परिचय पाया था, लेकिन काम के दौरान इस तरह सिर्फ उसकी नकल ही करनी पड़ती है, यह थोड़ा अफसोसजनक लगता है।
ilotoki जी द्वारा बनाई गई लाइब्रेरी शायद ADT के सबसे करीब पहुंचने वाला उदाहरण मानी जा सकती है। काश किसी दिन यह standard library में शामिल हो और व्यापक रूप से इस्तेमाल की जाए।
अगर
Messageका implementationUnionसे किया जाए, तो method inheritance का उपयोग नहीं किया जा सकता। उदाहरण के लिएऊपर की तरह
.processmethod जोड़ने पर, सभी variants के लिए.process()method का उपयोग किया जा सकता है।साथ ही, मैंने जिस repr का ज़िक्र किया था, उसका मतलब था 'उस enum के variant के रूप में repr'।
उदाहरण के लिए, जब
fieldenumreprको wrap करके call करता है, तो यह इस तरह काम करता है।अगर custom
__repr__न हो, तो यह बात व्यक्त नहीं होती कि वहMessageenum का sub-variant है।Quitएक unit variant है, इसलिए इसे call किए बिना उपयोग किया जाता है।इसके अलावा, जिन fieldless variants में call का उपयोग करना पड़ता है, उन्हें singleton के रूप में
isoperator से जाँचा जा सकता है।fieldenumका उपयोग करने पर इस तरह के कई implementation details, जिन्हें आसानी से नज़रअंदाज़ किया जा सकता है, अपने-आप संभालने में मदद मिलती है.मैं सुझाव देना चाहूँगा कि शायद आप PyCon Korea में इस पर एक प्रस्तुति दें। मुझे यह इतना दिलचस्प लगा कि मैं इसके बनने की प्रक्रिया के दौरान की आपकी कहानी और व्याख्या सीधे आपसे सुनना चाहूँगा!
अगर PyCon में प्रस्तुति देने का मौका मिले तो यह मेरे लिए सचमुच सम्मान की बात होगी। हालांकि, सिर्फ मेरी इच्छा से यह संभव होगा या नहीं, यह मुझे नहीं पता(^^;) फिर भी मैं इस पर विचार करूंगा।
और यह भी अच्छा होगा कि अंग्रेज़ी README में
Optionका example भी समझाया जाए।Optionआसानी से समझ में आने वाला है और उसके ज़रिए अपनापन महसूस करना भी आसान होगा। दस्तावेज़ में explanation के क्रम मेंOptionको पहले समझाया जाए तो शायद और बेहतर होगा।अंग्रेज़ी दस्तावेज़ अभी तैयार नहीं हैं, इसलिए वे थोड़े अपूर्ण हैं... कोरियाई दस्तावेज़ पर्याप्त रूप से परिपक्व हो जाने पर मैं उन्हें अंग्रेज़ी में अनुवाद करने की योजना बना रहा हूँ। या फिर संबंधित PR का भी स्वागत है!
मुझे भी लगता है कि पहले
Optionका परिचय देना बेहतर होगा। मैं इसे संशोधित करूँगा।ओओ। काफ़ी दिलचस्प है!!
आपने जो Korean दस्तावेज़ का example code लिंक किया है, उसमें एक संशोधन है।
बताने के लिए धन्यवाद। मैंने इसे सुधार दिया है!
इसे Show GN में पोस्ट करना था, लेकिन गलती से सामान्य के रूप में पोस्ट कर दिया;;
मैंने इसे संशोधित कर दिया है।
धन्यवाद~