настраиваемое сравнение для встроенных контейнеров

В моем коде есть множество сравнений на равенство различных контейнеров (list, dict и т. Д.). Ключи и значения контейнеров относятся к типам float, bool, int и str. Встроенные == и! = Работали отлично.

Я только что узнал, что числа с плавающей запятой, используемые в значениях контейнеров, необходимо сравнивать с помощью специальной функции сравнения. Я уже написал эту функцию (назовем ее окнуal () и предположим, что она принимает два числа с плавающей запятой и возвращает True, если они считаются равными, и False в противном случае).

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

Пример:

if dict1 != dict2:
  raise DataMismatch

Условие dict1! = Dict2 необходимо переписать так, чтобы любые числа с плавающей запятой, используемые в значениях dict1 и dict2 сравниваются с использованием функции aboutEqual вместо __ eq __ .

Фактическое содержимое словарей поступает из различных источников (файлы синтаксического анализа, вычисления и т. д.).

Примечание: Я ранее задавал вопрос о том, как переопределить встроенную функцию float eq . Это было бы простое решение, но я узнал, что Python не позволяет переопределять встроенные типы оператора __ eq __ . Отсюда этот новый вопрос.

5
задан Community 23 May 2017 в 10:33
поделиться