Ik heb (in Python) een object gemaakt wat drie strings bevat, en die wil ik in een Set stoppen, dus moet het object een goede __eq__ en __hash__ methode hebben. Dus ik had zoiets gedacht:
Maar helaas, dat werkt niet goed want __hash__ kan nu een getal teruggeven wat groter is dan een int, dus een long, en dat mag niet. Nu vraag ik me af, hoe maak ik nu een goede __hash__-implementatie? Ik neem aan dat de hash van objecten die volgens eq() hetzelfde zijn, ook hetzelfde moet zijn, maar anders niet.
Python:
1
2
3
4
5
6
7
8
9
10
11
| class A: def __init__(self, a, b, c): self.a = a self.b = b self.c = c def __eq__(self, other): return self.a == other.a and self.b == other.b and self.c == other.c def __hash__(self): return hash(self.a) + hash(self.b) + hash(self.c) |
Maar helaas, dat werkt niet goed want __hash__ kan nu een getal teruggeven wat groter is dan een int, dus een long, en dat mag niet. Nu vraag ik me af, hoe maak ik nu een goede __hash__-implementatie? Ik neem aan dat de hash van objecten die volgens eq() hetzelfde zijn, ook hetzelfde moet zijn, maar anders niet.