ধরা যাক আমাদের নীচের পাইথন ক্লাস রয়েছে (জাভাতে সমস্যাটি একই সাথে বিদ্যমান 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
?