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