मैं एक ऐसे मुद्दे पर चल रहा हूं जहां मैं एक सेट में एक उदाहरण जोड़ रहा हूं और फिर बाद में यह देखने के लिए परीक्षण कर रहा हूं कि उस ऑब्जेक्ट में उस ऑब्जेक्ट मौजूद है या नहीं। मैंने __eq__()
को ओवरराइड कर दिया है लेकिन इसे समावेशन परीक्षण के दौरान नहीं बुलाया जाता है। क्या मुझे इसके बजाय __hash__()
ओवरराइड करना है? यदि हां, तो मैं __hash__()
को कैसे कार्यान्वित करूं कि मुझे टुपल, सूची और शब्दकोश हैश की आवश्यकता है?सेट समावेशन परीक्षण के लिए __eq__ को कैसे कार्यान्वित करें?
class DummyObj(object):
def __init__(self, myTuple, myList, myDictionary=None):
self.myTuple = myTuple
self.myList = myList
self.myDictionary = myDictionary
def __eq__(self, other):
return self.myTuple == other.myTuple and \
self.myList == other.myList and \
self.myDictionary == other.myDictionary
def __ne__(self, other):
return not self.__eq__(other)
if __name__ == '__main__':
list1 = [1, 2, 3]
t1 = (4, 5, 6)
d1 = { 7 : True, 8 : True, 9 : True }
p1 = DummyObj(t1, list1, d1)
mySet = set()
mySet.add(p1)
if p1 in mySet:
print "p1 in set"
else:
print "p1 not in set"
शायद आप हमारे लिए यूनिट परीक्षण लिख सकते हैं कि आप सफल होने की उम्मीद करते हैं? मुझे आपके कोड के साथ 'p1 में सेट' मिलता है। क्या मुझे कुछ और चाहिए? – hughdbrown
हैशिंग म्यूटेबल ऑब्जेक्ट्स आमतौर पर एक अच्छा विचार नहीं है ... – mgilson
देखें http://miki.python.org/moin/DictionaryKss क्यों @mgilson सही है। – delnan