Что означает «dict-like» в Python?

Иногда люди ссылаются на объекты «X-like» в Python. Пример:

data_iter_maker – дескриптор с нулевым аргументом, который возвращает итератор над объектами данных типа dict.

Имеет ли «dict-like» точное определение, и если да, то что это? Будет ли это объект x который может быть проиндексирован, как словарь, может: x[a] , где a – хеширование? В этом случае именованный элемент может не считаться dict-like, поскольку вы не можете индексировать использование выражения типа x['a'] (последнее, что я проверил, вам нужно написать xa ). Но, с другой стороны, namedtuples функционально настолько похожи на dicts, что я не уверен, что думать.

Цинично, я соблазн предположить, что «dict-like» означает «объект, достаточно похожий на то, что мой код даст тот же ответ, что и вы представили семантически эквивалентный объект dict». Другими словами, «запустите функцию и узнайте сами, если ваш аргумент диктофон!»

В более общем смысле, является X-подобным объектом, который реализует тот же интерфейс, что и X?

2 Solutions collect form web for “Что означает «dict-like» в Python?”

Python использует « утиную печать »:

«Если это выглядит как утка и шарлатанцы, как утка, это, должно быть, утка».

Или, может быть, «Если это выглядит как утка и шарлатанцы, как утка, это достаточно близко к утке, чтобы относиться к ней как к одному». Очевидно, первое звучит лучше. Это тесно связано с доктриной питона «Легче просить прощения, чем просить разрешения» .

Диктоподобный объект – это объект, который реализует (или эмулирует) интерфейс словаря. Такая же концепция часто возникает для итераций и часто в numpy для объектов типа «массив» (или «array_like») .

Практическая утиная печать:

 dict_meths = set(dir({})) # Python3 class A: pass default_meths = set(dir(A())) diff = dict_meths - default_meths 

Теперь diff :

 {'__contains__', '__delitem__', '__getitem__', '__iter__', '__len__', '__setitem__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'} 

Когда вы реализуете все эти методы в своем классе, у вас, безусловно, есть подобный dict-объект. Если некоторые из менее распространенных, таких как update , отсутствуют, вы все равно можете говорить о диктоподобном объекте. Сравните файловые объекты .

  • Разница между dict и set (python)
  • pythonic способ связать элементы списка с их индексами
  • Python: Разделить список в массиве
  • Найти все пути через дерево (вложенные дикты) сверху вниз
  • Есть ли лучший, питонический способ сделать это?
  • Используйте dicts как элементы в наборе в Python
  • Каков наилучший способ реализации вложенных словарей?
  • Сохранение и обновление списков в словарях Python: почему это происходит?
  • Сохранение результата Minhash
  • Установить на питон Python
  • Комбинации словаря со значениями в списке с использованием Python
  • Python - лучший язык программирования в мире.