Diyelim şu Python sınıf var demek (sorun sadece aynı Java bulunmaktadır equalsve hashCode)
class Temperature:
def __init__(self, degrees):
self.degrees = degrees
degreesbir şamandıra olarak Kelvin sıcaklık nerede . Şimdi, eşitlik testi ve karma Temperatureyöntemini şu şekilde uygulamak istiyorum:
- Direkt eşitlik testi yerine şamandıranın epsilon farkını karşılaştırır,
- ve
a == bima 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?