Diyelim şu Python sınıf var demek (sorun sadece aynı Java bulunmaktadır equals
ve hashCode
)
class Temperature:
def __init__(self, degrees):
self.degrees = degrees
degrees
bir şamandıra olarak Kelvin sıcaklık nerede . Şimdi, eşitlik testi ve karma Temperature
yöntemini şu şekilde uygulamak istiyorum:
- Direkt eşitlik testi yerine şamandıranın epsilon farkını karşılaştırır,
- ve
a == b
ima eden sözleşmeyi onurlandırırhash(a) == hash(b)
.
def __eq__(self, other):
return abs(self.degrees - other.degrees) < EPSILON
def __hash__(self):
return # What goes here?
Python belgeleri bunu sağlamak için rakamları biraz karıştırmaktan bahsediyor , hash(2) == hash(2.0)
ancak bu aynı sorun değil.
Doğru yolda mıyım? Ve eğer öyleyse, bu durumda karma uygulamasının standart yolu nedir?
Güncelleme : Şimdi, şamandıralar için bu tip eşitlik testinin ==
ve equals
. Peki bu, yüzenlerin doğrudan karşılaştırılmaması gereken "ortak bilgi" ile nasıl birlikte gider? Şamandıraları karşılaştırarak bir eşitlik operatörü uygularsanız, statik analiz araçları şikayet edecektir. Bunu yapmak doğru mu?
kelvin
?