Язык программирования Python

Контейнеры


Под контейнером обычно понимают объект, основным назначением которого является хранение и обеспечение доступа к другим объектам. Контейнеры реализуют отношение "HAS-A" ("ИМЕЕТ") между объектами. Встроенные типы, список и словарь -- яркие примеры контейнеров. Можно построить собственные типы контейнеров, которые будут иметь свою логику доступа к хранимым объектам. В контейнере хранятся не сами объекты, а ссылки на них.

Для практических нужд в Python обычно хватает встроенных контейнеров (словаря и списка), но если это необходимо, можно создать и другие. Ниже приведен класс Стек, реализованный на базе списка:

class Stack: def __init__(self): """Инициализация стека""" self._stack = [] def top(self): """Возвратить вершину стека (не снимая)""" return self._stack[-1] def pop(self): """Снять со стека элемент""" return self._stack.pop() def push(self, x): """Поместить элемент на стек""" self._stack.append(x) def __len__(self): """Количество элементов в стеке""" return len(self._stack) def __str__(self): """Представление в виде строки""" return " : ".join(["%s" % e for e in self._stack])

Использование:

>>> s = Stack() >>> s.push(1) >>> s.push(2) >>> s.push("abc") >>> print s.pop() abc >>> print len(s) 2 >>> print s 1 : 2

Таким образом, контейнеры позволяют управлять набором (любых) других объектов в соответствии со структурой их хранения, не вмешиваясь во внутренние дела объектов. Узнав интерфейс класса Stack, можно и не догадаться, что он реализован на основе списка, и каким именно образом он реализован с помощью него. Но для использования стека это не важно.

Примечание:

В данном примере для краткости изложения не учтено, что в результате некоторых действий могут возбуждаться исключения. Например, при попытке снять элемент с вершины пустого стека.



Содержание раздела