में एक अनबाउंड विधि उठाकर मैं पायथन 3.x में एक अनबाउंड विधि चुनना चाहता हूं। मुझे यह त्रुटि मिल रही है:पायथन 3
>>> class A:
... def m(self):
... pass
>>> import pickle
>>> pickle.dumps(A.m)
Traceback (most recent call last):
File "<pyshell#3>", line 1, in <module>
pickle.dumps(A.m)
File "C:\Python31\lib\pickle.py", line 1358, in dumps
Pickler(f, protocol, fix_imports=fix_imports).dump(obj)
_pickle.PicklingError: Can't pickle <class 'function'>: attribute lookup builtins.function failed
क्या किसी के पास इसका अनुभव है?
नोट: पायथन 2.x में डिफ़ॉल्ट रूप से अनबाउंड विधियों को चुनना भी असंभव है; मैं इसे कुछ अजीब तरीके से करने में कामयाब रहा, मुझे समझ में नहीं आया: मैंने मेथड टाइप क्लास के लिए copy_reg
मॉड्यूल के साथ एक रेड्यूसर लिखा, जिसमें बाध्य और अनबाउंड दोनों विधियां शामिल हैं। लेकिन reducer केवल बाध्य विधि के मामले को हल किया, क्योंकि यह my_method.im_self
पर निर्भर था। रहस्यमय रूप से यह पाइथन 2.x को अनबाउंड विधियों को चुनने में सक्षम होने के कारण भी है। यह पायथन 3.x पर नहीं होता है।
क्या आप कह रहे हैं कि पाइथन 3 पर, एक अनबाउंड विधि दी गई है, यह जानने का कोई तरीका नहीं है कि यह विधि कहां परिभाषित की गई थी? –
हां। दो वर्गों की घोषणा करने का प्रयास करें और एक विधि को एक से दूसरे में असाइन करें ('बीएम = एएम')। फिर 'बीएम' और 'एएम' बराबर होंगे (वास्तव में, समान), इसलिए यह बताना संभव नहीं है कि आपने 'बी' या 'ए' में विधि को देखा है या नहीं। – doublep