मान लें कि हमारे पास निम्नलिखित पायथन वर्ग है (जावा में समस्या केवल उसी के साथ मौजूद है equals
और hashCode
)
class Temperature:
def __init__(self, degrees):
self.degrees = degrees
degrees
केल्विन में एक फ्लोट के रूप में तापमान कहां है। अब, मैं समानता परीक्षण लागू करना चाहता हूं और Temperature
एक तरह से इसके लिए हैशिंग
- प्रत्यक्ष समानता परीक्षण के बजाय एक एप्सिलॉन अंतर पर तैरने की तुलना करता है,
- और उस अनुबंध का सम्मान करता है जिसका
a == b
तात्पर्य हैhash(a) == hash(b)
।
def __eq__(self, other):
return abs(self.degrees - other.degrees) < EPSILON
def __hash__(self):
return # What goes here?
पायथन प्रलेखन यह सुनिश्चित करने के लिए हैशिंग संख्या के बारे में थोड़ी बात करता है hash(2) == hash(2.0)
लेकिन यह काफी समान समस्या नहीं है।
क्या मैं भी सही रास्ते पर हूँ? और यदि हां, तो इस स्थिति में हैशिंग को लागू करने का मानक तरीका क्या है?
अपडेट : अब मैं समझता हूँ कि समानता तैरता के लिए परीक्षण के इस प्रकार के संक्रामिता समाप्त ==
और equals
। लेकिन यह कैसे "सामान्य ज्ञान" के साथ मिलकर चलता है कि तैरने की तुलना सीधे नहीं की जानी चाहिए? यदि आप फ़्लोट्स की तुलना करके एक समानता ऑपरेटर को लागू करते हैं, तो स्थैतिक विश्लेषण उपकरण शिकायत करेंगे। क्या वे ऐसा करने के लिए सही हैं?
kelvin
?