शामिल मैं अजगर 2.7अजगर सेट होता है बनाम सूची
उपयोग कर रहा हूँनिम्नलिखित स्निपेट पर विचार (उदाहरण के काल्पनिक है):
import datetime
class ScheduleData:
def __init__(self, date):
self.date = date
def __eq__(self, other):
try:
return self.date == other.date
except AttributeError as e:
return self.date == other
def __hash__(self):
return hash(self.date)
schedule_set = set()
schedule_set.add(ScheduleData(datetime.date(2010, 8, 7)))
schedule_set.add(ScheduleData(datetime.date(2010, 8, 8)))
schedule_set.add(ScheduleData(datetime.date(2010, 8, 9)))
print (datetime.date(2010, 8, 8) in schedule_set)
schedule_list = list(schedule_set)
print (datetime.date(2010, 8, 8) in schedule_list)
इस से निर्गम (मेरे लिए अप्रत्याशित है, कम से कम) पर:
[08:02 PM toolscripts]$ python test.py
True
False
पहले मामले में
, दी गई तारीख schedule_set
में पाया जाता है के रूप में मैं __hash__
और __eq__
कार्यों अधिरोहित है।
मेरी समझ से in
ऑपरेटर सेट के लिए हैश और समानता के खिलाफ जांच करेगा, लेकिन सूचियों के लिए यह सूची में आइटमों को आसानी से फिर से चालू करेगा और समानता की जांच करेगा।
तो यहां क्या हो रहा है? schedule_list
सूची में in
के लिए मेरा दूसरा परीक्षण क्यों विफल हो गया है?
क्या मुझे सूचियों के लिए कुछ अन्य फ़ंक्शन ओवरराइड करना है?
मेरे लिए काम करता है .. पायथन 3.3 मुझे आश्चर्य है क्यों। पुष्टि की, यह पायथन 2.7 – aIKid
पर काम नहीं करता है, साथ ही '__neq__' जोड़ने का प्रयास करें। – tacaswell
@tcaswell, धन्यवाद, मैंने पहले से ही कोशिश की है और इसका उल्लेख किया जाना चाहिए था, लेकिन यह काम नहीं करता - उन '__ne__', '__neq__' और' __eq__' कार्यों को दूसरे मामले में नहीं कहा जाता है। – randomfigure