UserDict — Обёртка класса для словарей
Исходный код: Lib/UserDict.py
Модуль определяет миксин DictMixin, определяющий все методы словаря для классов, которые уже имеют минимальный интерфейс отображения. Это значительно упрощает написание классов, которые должны быть заменяемыми для словарей (например, модуль shelve).
Этот модуль также определяет класс UserDict, который служит обёрткой вокруг объектов словарей. Необходимость в этом классе в значительной степени устранена возможностью прямого наследования от dict (функциональность доступна начиная с Python версии 2.2). До появления dict класс UserDict использовался для создания подклассов словарей, получающих новые свойства путём переопределения существующих методов или добавления новых.
Модуль UserDict определяет класс UserDict и DictMixin:
-
class UserDict.UserDict([initialdata]) -
Класс, имитирующий словарь. Содержимое экземпляра хранится в обычном словаре, доступном через атрибут
dataэкземпляровUserDict. Если задано initialdata,dataинициализируется его содержимым; обратите внимание, что ссылка на initialdata не сохраняется, позволяя использовать его для других целей.Примечание
Для обратной совместимости экземпляры
UserDictне являются итерируемыми.
-
class UserDict.IterableUserDict([initialdata]) -
Подкласс
UserDict, поддерживающий прямую итерацию (например,for key in myDict).
Помимо поддержки методов и операций отображений (см. раздел Типы отображений — dict), экземпляры UserDict и IterableUserDict предоставляют следующий атрибут:
-
IterableUserDict.data -
Реальный словарь, используемый для хранения содержимого класса
UserDict.
-
class UserDict.DictMixin -
Миксин, определяющий все методы словаря для классов, уже имеющих минимальный интерфейс словаря, включая
__getitem__(),__setitem__(),__delitem__()иkeys().Этот миксин должен использоваться в качестве суперкласса. Добавление каждого из перечисленных методов постепенно расширяет функциональность. Например, определение всех, кроме
__delitem__(), исключит толькоpop()иpopitem()из полного интерфейса.Помимо четырёх базовых методов, дополнительная эффективность достигается при определении
__contains__(),__iter__()иiteritems().Поскольку миксин не знает о конструкторе подкласса, он не определяет
__init__()илиcopy().Начиная с Python версии 2.6, рекомендуется использовать
collections.MutableMappingвместоDictMixin.Обратите внимание, что DictMixin не реализует методы
viewkeys(),viewvalues()илиviewitems().
UserList — Обёртка класса для списков
Примечание
При выпуске Python 2.2 многие случаи использования этого класса были подменены возможностью прямого наследования от list. Однако остаётся несколько случаев использования.
Этот модуль предоставляет интерфейс списка вокруг базового хранилища данных. По умолчанию, этим хранилищем является list; однако, он может использоваться для создания списка-подобного интерфейса вокруг других объектов (например, для хранения на постоянном носителе).
Кроме того, этот класс может быть включён в встроенные классы с использованием множественного наследования. Это иногда может быть полезно. Например, можно наследоваться как от UserList, так и от str. Это было бы невозможно с как с реальным list , так и с реальным str.
В этом модуле определён класс, действующий как обёртка вокруг списков. Это полезный базовый класс для собственных списков, которые могут наследоваться от него и переопределять существующие методы или добавлять новые. Таким образом, можно добавлять новые свойства к списку.
Модуль UserList определяет класс UserList:
-
class UserList.UserList([list]) -
Класс, имитирующий список. Содержимое экземпляра хранится в обычном списке, доступном через атрибут
dataэкземпляровUserList. Содержимое экземпляра по умолчанию устанавливается как копия list, по умолчанию пустой список[]. list может быть любой итерируемой последовательностью, например, реальный список Python или объектUserList.Примечание
Класс
UserListперемещён в модульcollectionsв Python 3. Инструмент 2to3 автоматически адаптирует импорты при преобразовании ваших источников в Python 3.
Помимо поддержки методов и операций изменяемых последовательностей (см. раздел Типы последовательностей — str, unicode, list, tuple, bytearray, buffer, xrange), экземпляры UserList предоставляют следующий атрибут:
-
UserList.data -
Реальный список Python, используемый для хранения содержимого класса
UserList.
Требования к подклассам: Подклассы UserList должны предоставлять конструктор, который можно вызывать без аргументов или с одним аргументом. Операции со списками, возвращающие новую последовательность, пытаются создать экземпляр класса фактической реализации. Для этого предполагается, что конструктор можно вызвать с единственным параметром, который является объектом последовательности, используемым в качестве источника данных.
Если производному классу не требуется соответствовать этому требованию, необходимо переопределить все специальные методы, поддерживаемые этим классом; обратитесь к источникам за информацией о методах, которые необходимо предоставить в этом случае.
Изменено в версии 2.0: В версиях Python 1.5.2 и 1.6 также требовалось, чтобы конструктор был вызываем без параметров, и предлагать изменяемый атрибут data . Более ранние версии Python не пытались создать экземпляры производного класса.
UserString — Обёртка класса для строк
Примечание
Этот UserString класс из этого модуля доступен только для обеспечения обратной совместимости. Если вы пишете код, которому не нужно взаимодействовать с версиями Python, предшествующими Python 2.2, рассмотрите возможность непосредственного наследования от встроенного типа str, вместо использования UserString (встроенного эквивалента MutableString нет).
Этот модуль определяет класс, который действует как оболочка вокруг строковых объектов. Он является полезным базовым классом для ваших собственных строкоподобных классов, которые могут наследоваться от него и переопределять существующие методы или добавлять новые. Таким образом, можно добавить новые свойства к строкам.
Следует отметить, что эти классы значительно менее эффективны по сравнению с реальными строками или объектами Юникод; это особенно справедливо для MutableString.
Модуль UserString определяет следующие классы:
-
class UserString.UserString([sequence]) -
Класс, эмулирующий строковый или строковый объект Юникод. Содержимое экземпляра хранится в обычной строке или строке Юникод, доступной через атрибут
dataэкземпляровUserString. Содержимое экземпляра изначально устанавливается как копия sequence. sequence может быть обычной строкой Python или строкой Юникод, экземпляромUserString(или подклассом) или произвольной последовательностью, которая может быть преобразована в строку с помощью встроенной функцииstr().Примечание
Класс
UserStringбыл перемещен в модульcollectionsв Python 3. Инструмент 2to3 автоматически адаптирует импорты при преобразовании ваших исходных файлов в Python 3.
-
class UserString.MutableString([sequence]) -
Этот класс наследуется от класса
UserStringвыше и переопределяет строки для того, чтобы они были изменяемыми. Изменяемые строки не могут использоваться в качестве ключей словарей, так как словари требуют неизменяемые объекты в качестве ключей. Основной целью этого класса является демонстрация наследования и необходимости удаления (переопределения) метода__hash__()для предотвращения попыток использования изменяемого объекта в качестве ключа словаря, что в противном случае может привести к ошибкам, которые трудно отследить.Устарел начиная с версии 2.6: Класс
MutableStringбыл удален в Python 3.
В дополнение к поддержке методов и операций строк и объектов Юникод (см. раздел Методы строк), экземпляры UserString предоставляют следующий атрибут:
-
MutableString.data -
Реальная строка Python или объект Юникод, используемый для хранения содержимого класса
UserString.
© 2001–2020 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/2.7/library/userdict.html