Вопрос

Я хочу присвоить переменной («константе») значение, которое позволит этой переменной всегда возвращаться. True в is и == сравнения с самим собой.

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

Я рассматриваю возможность создания экземпляра класса, который использует уникальность CPython. id() значения в любых сравнениях, которые значение может поддерживать.

От здесь:

If no __cmp__(), __eq__()  or __ne__()  operation is defined, class instances are compared by object identity (“address”).

Предлагаю следующее:

MY_CONSTANT = object()

Будет только всегда вернуть true в сравнении с MY_CONSTANT в реализации CPython, если MY_CONSTANT каким-то образом был собран мусор, и во время сравнения на его месте было выделено что-то еще (я предполагаю, что этого, вероятно, никогда не произойдет).

Это было полезно?

Решение

Пока MY_CONSTANT остается в области видимости, объект, на который он ссылается, не подлежит сборке мусора.Тебе действительно следует всегда использовать is для сравнения, как поведение == может быть переопределено

Другие советы

Да.Это хороший способ определить уникальные константы.Конечно, существует минимальный риск того, что любой объект, с которым вы его сравниваете, будет определен как равный всему, но если все играют достаточно хорошо, это должно сработать.Кроме того, проблема со сборкой мусора не будет проблемой, потому что, если это когда-нибудь произойдет, ваша константа уже исчезнет, ​​и ее не будет рядом, чтобы сравнить ее с новым объектом с тем же идентификатором.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top