Развёрнутое пояснение
1️⃣Класс 𝙸𝚝𝚎𝚖 определяет __𝚎𝚚__ для сравнения по значению 𝚡. Объекты 𝚊 и 𝚋 равны: 𝚊 == 𝚋 возвращает True.
2️⃣Но по умолчанию Python предполагает: если объекты могут быть равны по __𝚎𝚚__, то они должны иметь одинаковый хеш. Без явного __𝚑𝚊𝚜𝚑__ это нарушается.
3️⃣Поэтому Python автоматически устанавливает __𝚑𝚊𝚜𝚑__ = 𝙽𝚘𝚗𝚎, делая объекты нехешируемыми.
4️⃣При попытке создать {𝚊, 𝚋} выбрасывается TypeError: unhashable type: 'Item'.
Почему это важно
Если нужны и сравнение, и хеширование (для 𝚜𝚎𝚝/𝚍𝚒𝚌𝚝), определите оба метода: __𝚎𝚚__ и __𝚑𝚊𝚜𝚑__, причём равные объекты должны иметь равные хеши.
Post #4610
864
- ✍ 5
- 👍 3