Объекты типа mapping и sequence

Типы объектов мапирования и последовательности

Введение

У Python существует два универсальных типа объекта container: тип мапирования (mapping) и тип последовательности (sequence). Архетипические примеры этих базовых типов данных – словарь и список.

Python использует протокол для работы с этими типами данных. Эти протоколы основаны на определенных методах, которыми обладают эти объекты. Имена методов обычно начинаются и заканчиваются двойным подчеркиванием – например. __getitem__ – для того, чтобы указать, что они являются особыми. (Иногда они называются магическими методами, потому что их использование полностью невидимо для программиста.

Это означает, что можно  реализовать свои собственные объекты, которые ведут себя, как стандартные объекты-контейнеры. Это полезно тем, что можно  использовать обычный синтаксис Python для доступа к данным, содержащимся в объекте.
Это называется утиная типизация (duck typing), еще её называют неявной типизацией или латентной типизацией. Если объект ходит как словарь, и крякает, как словарь, Python не волнует, является ли объект на самом деле словарем или нет :).

Такая типизация – duck typing – несет в себе некоторые проблемы. В частности, иногда нужно иметь возможность показать различие типов, и не всегда очевидно, как это сделать. Этому будет посвящена отдельная статья.

Ссылки на документацию Python

Предположим, вы собираетесь реализовать контейнерный объект, и вы хотите знать, какие методы вам нужно выполнить.

Один из способов – изучить исходный код UserList и UserDict. Они содержат реализации магических методов, таким образом, вы можете либо их подклассифицировать, либо разумно использовать копирование и вставку.

Поиск ссылок в документации на Python может быть затруднительным, поскольку необходимая информация разбросана по нескольким страницам.

В этой серии статей собрана информация со всех соответствующих страниц документации:

Все статьи по теме:

Поделитесь с друзьями:

Оставьте комментарий