पायथन में, मैं क्लास ऑब्जेक्ट को एक ताना में कैसे डालूं?

| | | | | | |

मान लें कि मेरे पास अजगर में एक साधारण वर्ग है

वर्ग Wharrgarbl(object): def __init__(self, a, b, c, sum, version="old" ): self.a = a self.b = b self.c = c self.sum = 6 self.version = version def __int__(self): return self.sum + 9000 def __what_goes_here__(self): रिटर्न {"a" : self.a, "b": self.b, "c": self.c} 

मैं इसे बहुत आसानी से एक पूर्णांक में डाल सकता हूं

>>> w = Wharrgarbl ("एक", "दो", "तीन", 6) >>> int(w) 9006 

जो बढ़िया है! लेकिन, अब मैं इसे इसी तरह से एक निर्देश में डालना चाहता हूं

>>> w = Wharrgarbl ("एक", "दो", "तीन", 6) >>> dict(w) {"a": "one", "c": "three", "b": "two"} 

इसे काम करने के लिए मुझे क्या परिभाषित करने की आवश्यकता है ? मैंने __dict__ और dict दोनों को __what_goes_here__ के लिए प्रतिस्थापित करने का प्रयास किया, लेकिन dict(w) के परिणामस्वरूप TypeError हो गया। : Wharrgarbl ऑब्जेक्ट दोनों ही मामलों में चलने योग्य नहीं है। मुझे नहीं लगता कि केवल कक्षा को चलने योग्य बनाने से समस्या का समाधान हो जाएगा। मैंने "पायथन कास्ट ऑब्जेक्ट टू डिक्ट" के कई अलग-अलग शब्दों के साथ कई googles का भी प्रयास किया, जैसा कि मैं सोच सकता था लेकिन कुछ भी प्रासंगिक नहीं मिला:{

भी! ध्यान दें कि कैसे w.__dict__ को कॉल करने से वह नहीं होगा जो मैं चाहता हूं क्योंकि इसमें w.version और w.sum शामिल होंगे। मैं कलाकारों को dict में उसी तरह अनुकूलित करना चाहता हूं जैसे कि मैं def int(self) का उपयोग करके कलाकारों को int में अनुकूलित कर सकता हूं।

मुझे पता है कि मैं ऐसा कुछ कर सकता था

>>> w.__what_goes_here__() {"a": "one", "c": "three", "b": "two"} 

लेकिन मैं मान रहा हूं कि एक पाइथोनिक तरीका है dict(w) काम करने के लिए क्योंकि यह int(w) या str(w) जैसा ही है। अगर वहाँ "टा और पाइथोनिक तरीका है, तो वह भी ठीक है, बस लगा कि मैं" पूछूंगा। ओह! मुझे लगता है कि यह मायने रखता है, यह अजगर 2.7 के लिए है, लेकिन 2.4 पुराने और बस्टेड समाधान के लिए सुपर बोनस अंक भी है।

एक और सवाल है पायथन क्लास पर ओवरलोडिंग __dict__() यह इस के समान है, लेकिन यह एक डुप्लिकेट नहीं होने की गारंटी देने के लिए पर्याप्त भिन्न हो सकता है। मेरा मानना है कि ओपी पूछ रहा है कि अपनी कक्षा की वस्तुओं में सभी डेटा को शब्दकोशों के रूप में कैसे डाला जाए। मैं उसमें एक अधिक अनुकूलित दृष्टिकोण की तलाश कर रहा हूं। मैं नहीं चाहता कि __dict__ में सब कुछ dict() द्वारा दिए गए शब्दकोश में शामिल हो। सार्वजनिक बनाम निजी चर जैसा कुछ यह समझाने के लिए पर्याप्त हो सकता है कि मैं क्या ढूंढ रहा हूं। ऑब्जेक्ट गणना में उपयोग किए गए कुछ मानों को संग्रहीत करेंगे और जैसे कि मुझे परिणामी शब्दकोशों में दिखाने की आवश्यकता नहीं है।

अद्यतन: मैंने asdict< के साथ जाना चुना है /code> मार्ग का सुझाव दिया लेकिन यह एक कठिन विकल्प था कि मैं प्रश्न का उत्तर बनना चाहता था। @RickTeachey और @jpmc26 दोनों ने वह उत्तर प्रदान किया जिसके साथ मैं रोल करने जा रहा हूं, लेकिन पूर्व के पास अधिक जानकारी और विकल्प थे और उसी परिणाम पर भी उतरे और अधिक अपवोट किए गए इसलिए मैं इसके साथ गया। हालांकि चारों ओर अपवोट और धन्यवाद के लिए मदद। मैंने स्टैकओवरफ्लो पर लंबे समय तक और कड़ी मेहनत की है और मैं अपने पैर की उंगलियों को पानी में और अधिक लाने की कोशिश कर रहा हूं।