python - pickle.loads does not return the same data dumped -
पॉलिसी मॉड्यूल मेरे द्वारा बनाई गई एक क्लास है
यह वही है मुद्रित: <प्री> ट्रॉफी टू डंप ट्रू रूटिंग मैच: ('dstip', 10.0.0.1) समानांतर: क्रमिक: मैच: ('स्विच', 2) ('dstip', 10.0.0.2) fwd 1 अनुक्रमिक: मैच: ('स्विच', 2) ('dstip', 10.0.0.3) fwd 2 अनुक्रमिक: मैच: ('dstip', 10.0.0.1) समानांतर: क्रमिक: मैच: ('स्विच', 2) ('dstip', 10.0.0.2) एफडब्ल्यूडी 1 अनुक्रमिक: मैच: ('स्विच', 2) ('dstip', 10.0.0.3) एफडब्ल्यूड 2 पी ओलिक्सी लोडेड ट्रू रूटिंग मैच: ('dstip', 10.0.0.1) पहचान ड्रॉप
अच्छी तरह से ध्यान दें : मैच, अनुक्रमिक, एफडब्ल्यूडी और समानांतर अन्य वर्गों के उदाहरण हैं ।
प्रत्येक वर्ग के लिए, मैं निम्नलिखित के रूप में सेटस्टेट और getstate विधियां सेट करता हूं:
def __getstate __ (आत्म ): odict = self .__ dict __. copy () # dict की प्रतिलिपि बनाने के बाद से हम इसे बदलते हैं odict def __setstate __ (आत्म, dict): स्वयं .__ dict __। अद्यतन (dict) ऐसा लगता है कि समस्या यहां है:
वर्ग अनुक्रमिक (कॉम्बिनेटर पॉलिसी): def __new __ (आत्म, नीतियों = []): यदि लेन (नीतियां) == 0: वापसी पहचान और वापसी: rv = super ( अनुक्रमिक, स्वयं) .__ नया __ (अनुक्रमिक, नीतियां) आरवी .__ init __ (नीतियां) वापस आर.वी. और यहां:
वर्ग समानांतर (कॉम्बिनेटर पॉलिसी): def __new __ (आत्म, नीतियों = []): # Hackety हैक। अगर लेन (नीतियों) == 0: वापसी ड्रॉप अन्य: आरवी = सुपर (समानांतर, स्वयं) .__ नया __ (समानांतर, नीतियों) आर.वी. .__ init __ (नीतियां) वापस आर.वी. क्योंकि मैं हमेशा अनुक्रमिक के बजाय एक समानांतर उदाहरण के बजाय ड्रॉप और पहचान प्राप्त करें यह सेटडेट विधि की तरह नया विधि को रिक्त सूची से गुज़रता है।
मुझे स्वयं का समाधान मिला।
मैं समानांतर और अनुक्रमिक दोनों में getnewargs विधियों को परिभाषित करने में भूल गया < / em> वर्ग।
अधिक जानकारी।
Comments
Post a Comment