2009-10-13 7 views
6

मैं एक संग्रह कक्षा पर काम कर रहा हूं जिसे मैं __eq__ विधि बनाना चाहता हूं। यह और अधिक नीच हो रहा है जितना मैंने सोचा था कि यह होगा और मैंने कई जटिलताओं को देखा है जहां तक ​​निर्मित संग्रह कक्षाएं काम करती हैं।संग्रह वर्ग के लिए __eq__ विधि का एक अच्छा उदाहरण क्या है?

वास्तव में मुझे सबसे अच्छा उदाहरण क्या होगा, यह एक अच्छा उदाहरण है। क्या मानक पुस्तकालय में या किसी तीसरे पक्ष के पुस्तकालयों में __eq__ विधि का कोई शुद्ध पायथन कार्यान्वयन है?

उत्तर

1

"संग्रह" पर एक नज़र डालें। नवीनतम संस्करण (संस्करण नियंत्रण से) एक ±eq__ के साथ ऑर्डर्ड डिक्ट्री लागू करता है। Set.py

+0

धन्यवाद। मैंने सोचा कि संग्रह सी में लागू किया गया था ... –

+0

पायथन 2.5 और 2.6 में यह एक सी एक्सटेंशन मॉड्यूल है। 2.7 में (संस्करण नियंत्रण से) यह एक पायथन मॉड्यूल है जो सी एक्सटेंशन मॉड्यूल _collections से डेक और डिफॉल्टडिक्ट आयात करता है। ऑर्डर्ड डिक्ट 3.1 में नया है और 2.7 तक बैकपोर्ट किया गया है। –

7

पार्ट्स कठिन हैं। पार्ट्स सरल प्रतिनिधिमंडल होना चाहिए।

def __eq__(self, other): 
    if len(self) != len(other): 
     # Can we continue? If so, what rule applies? Pad shorter? Truncate longer? 
    else: 
     return all(self[i] == other[i] for i in range(len(self))) 
+0

में एक __eq__ भी है, मैंने कोशिश की, लेकिन यहां कुछ बारीकियां हैं। उदाहरण के लिए, निम्नलिखित झूठी तुलना करता है: '(1,2,3) == [1,2,3]'। यही कारण है कि मैं एक उदाहरण चाहता था: यह सुनिश्चित करने के लिए कि मैं सभी कोने के मामलों और क्या नहीं जानता। –

+0

(1,2,3) [1,2,3] के बराबर नहीं है क्योंकि वे विभिन्न प्रकार हैं। आपको किस तरह के जबरन नियम लागू होते हैं? यह काफी जटिल है। यह "अधिक सामान्य" प्रकार है? 'tuple (self [i]) == tuple (अन्य [i])' –

+0

सभी संग्रह अनुक्रमणीय नहीं हैं - जैसे कि सेट - और इस बात की कोई गारंटी नहीं है कि बराबर संग्रह में उनके आइटम एक ही क्रम में होंगे। – PaulMcG

संबंधित मुद्दे