मुझे पायथन में एक 'कंटेनर' ऑब्जेक्ट या क्लास बनाने की ज़रूरत है, जो अन्य वस्तुओं का रिकॉर्ड रखता है जिसे मैं भी परिभाषित करता हूं। इस कंटेनर की एक आवश्यकता यह है कि यदि दो वस्तुओं को एक समान माना जाता है, तो एक (या तो) को हटा दिया जाता है। मेरा पहला विचार set([])
इस आवश्यकता को पूरा करने के लिए युक्त वस्तु के रूप में उपयोग करना था ।
हालाँकि, सेट दो समान ऑब्जेक्ट इंस्टेंस में से एक को नहीं निकालता है। मुझे एक बनाने के लिए क्या परिभाषित करना चाहिए?
यहाँ पायथन कोड है।
class Item(object):
def __init__(self, foo, bar):
self.foo = foo
self.bar = bar
def __repr__(self):
return "Item(%s, %s)" % (self.foo, self.bar)
def __eq__(self, other):
if isinstance(other, Item):
return ((self.foo == other.foo) and (self.bar == other.bar))
else:
return False
def __ne__(self, other):
return (not self.__eq__(other))
दुभाषिया
>>> set([Item(1,2), Item(1,2)])
set([Item(1, 2), Item(1, 2)])
यह स्पष्ट है कि __eq__()
, जिसे कहा जाता है x == y
, वह सेट द्वारा कहा जाने वाला तरीका नहीं है। क्या कहते हैं? मुझे किस अन्य विधि को परिभाषित करना चाहिए?
ध्यान दें: Item
s को परिवर्तनशील रहना चाहिए, और बदल सकता है, इसलिए मैं एक विधि प्रदान नहीं कर सकता __hash__()
। यदि यह ऐसा करने का एकमात्र तरीका है, तो मैं अपरिवर्तनीय Item
एस के उपयोग के लिए फिर से लिखूंगा ।