Действительно ли это - хорошая идея хешировать класс Python?

Я склоняюсь к идее, что операторы возврата в середина из функции плохи. Можно использовать возвраты, чтобы создать несколько защитных пунктов во главе функции и конечно сказать компилятор, что возвратиться в конце функции без проблемы, но возвраты в середину из функции может быть легко пропустить и может сделать функцию тяжелее для интерпретации.

5
задан SilentGhost 27 August 2009 в 14:21
поделиться

2 ответа

Да, любой объект, который не реализует функцию __ hash __ () , вернет свой идентификатор при хешировании. Из Справочник по языку Python: Модель данных - Базовая настройка :

Определяемые пользователем классы по умолчанию имеют методы __ cmp __ () и __ hash __ () ; с ними все объекты сравниваются неравно (кроме самих себя), а x .__ hash __ () возвращает id (x) .

Однако, если вы хотите иметь уникальный идентификатор, используйте id , чтобы четко обозначить свои намерения. Хеш объекта должен быть комбинацией хешей его компонентов. Подробнее см. Ссылку выше.

8
ответ дан 18 December 2019 в 13:17
поделиться

Классы имеют реализации по умолчанию __ eq __ и __ hash __ , которые используют id () для сравнения и вычисления хэша. значения соответственно. То есть они сравнивают по идентичности. Основное правило для реализации методов __ hash __ состоит в том, что если два объекта сравниваются как равные друг другу, они также должны иметь одинаковое хеш-значение. Значения хэша можно рассматривать как простую оптимизацию, используемую dicts и наборами для более быстрого поиска одинаковых объектов. Следовательно, если вы измените __ eq __ для выполнения другого вида проверки равенства, вы также должны изменить свою реализацию __ hash __ , чтобы согласиться с этим выбором.

Классы, использующие идентичность для сравнения, могут свободно видоизменяться и использоваться в диктатах и ​​наборах, потому что их идентичность никогда не меняется.

6
ответ дан 18 December 2019 в 13:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: