Если класс не перегружает оператор ==, то каково значение объекта этого класса?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Если класс не перегружает оператор ==, то каково значение объекта этого класса?

Сообщение Anonymous »

Из справочника Python:

Каждый объект имеет идентификатор, тип и значение.


Операторы сравнения реализуют определенное представление о значении объекта. Их можно рассматривать как определение значения объекта косвенно, посредством реализации сравнения.

И Лучано Рамальо в своей книге «Fluent Python» говорит, что (на стр. 206 второго изд.):

Оператор == сравнивает значения объектов (данные, которые они содержат ), а is сравнивает их личности.

Итак, одно из возможных определений значения объекта (Я думаю, что это единственное определение ценности объекта, которое хоть как-то очень тщательно и без подробностей упомянуто в официальной ссылке) следующее. Значением объекта являются данные, которые используются методом __eq__() этого объекта. Но есть классы, которые не переопределяют этот метод. Какова ценность экземпляра такого класса?

(Обратите внимание, что я не прошу здесь строгого и строгого определения, поскольку оно вряд ли существует. Мне просто нужно что-то немного более практично, чем «ценность объекта — это информация, которую представляет этот объект» — эту фразу говорят люди, когда я спрашиваю их о концепции ценности объекта. Это верная фраза, но она не очень полезна, потому что она слишком абстрактна. .)

Например, допустим, у нас есть некоторая функция f — экземпляр встроенной функции класс. Этот класс не переопределяет __eq__(), поэтому в этом случае оператор == просто сравнивает идентификаторы своих операндов (если оба операнда являются функциями). Но я не думаю, что мы можем сказать, что значение объекта f совпадает с идентификатором f. Действительно, люди говорят, что пользовательские функции — это изменяемые объекты, другими словами, их значение можно изменить. Но невозможно изменить личность f (или любого другого объекта). Итак, значение f не равно id(f). Его следует определить по-другому, и я надеюсь, что его можно определить правильно (если не в Python вообще, то хотя бы в CPython).
Здесь, на stackoverflow, я видел некоторые определения функционального объекта значение, например здесь:

Это «значение» — это набор других значений, которых достаточно для определения точно такой же функции.

Но я не уверен, что это «каноническое» определение.

Подробнее здесь: https://stackoverflow.com/questions/791 ... -an-object
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»