> **Источник:** https://python-all.ru/2.7/library/bastion.html
>
> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.

---

# 30.2. [`Bastion`](https://python-all.ru/2.7/library/bastion.html#module-Bastion) – Ограничение доступа к объектам

Устарело с версии 2.6: Модуль [`Bastion`](https://python-all.ru/2.7/library/bastion.html#module-Bastion) удалён в Python 3.

Изменено в версии 2.3: Модуль отключён.

> **Примечание**
>
> Документация оставлена на месте, чтобы помочь при чтении старого кода, который использует этот модуль.

Согласно словарю, бастион – это «укреплённая площадь или позиция», или «нечто, считающееся оплотом». Это подходящее название для данного модуля, который предоставляет способ запретить доступ к определённым атрибутам объекта. Его всегда следует использовать с модулем [`rexec`](https://python-all.ru/2.7/library/rexec.html#module-rexec), чтобы разрешить программам в ограниченном режиме доступ к определённым безопасным атрибутам объекта, одновременно запрещая доступ к другим, небезопасным атрибутам.

#### `Bastion.Bastion(object[, filter[, name[, class]]])`

Защищает объект *объект*, возвращая для него бастион. Любая попытка получить доступ к одному из атрибутов объекта должна быть одобрена функцией *фильтр*; если доступ запрещён, будет вызвано исключение [`AttributeError`](https://python-all.ru/2.7/library/exceptions.html#exceptions.AttributeError).

Если указан, *фильтр* должен быть функцией, которая принимает строку, содержащую имя атрибута, и возвращает true, если доступ к этому атрибуту разрешён; если *фильтр* возвращает false, доступ запрещён. Фильтр по умолчанию запрещает доступ к любой функции, начинающейся с подчёркивания (`'_'`). Строковое представление бастиона будет равно `<Bastion for name>`, если задано значение для *имя*; в противном случае будет использовано `repr(object)`.

*класс*, если указан, должен быть подклассом [`BastionClass`](https://python-all.ru/2.7/library/bastion.html#Bastion.BastionClass); подробнее см. код в `bastion.py`. Переопределение стандартного [`BastionClass`](https://python-all.ru/2.7/library/bastion.html#Bastion.BastionClass) редко требуется.

#### `class Bastion.BastionClass(getfunc, name)`

Класс, который фактически реализует объекты-бастионы. Это стандартный класс, используемый [`Bastion()`](https://python-all.ru/2.7/library/bastion.html#module-Bastion). Параметр *getfunc* – это функция, которая возвращает значение атрибута, который должен быть открыт для окружения с ограниченным выполнением при вызове с именем атрибута в качестве единственного параметра. *имя* используется для построения [`repr()`](https://python-all.ru/2.7/library/functions.html#repr) экземпляра [`BastionClass`](https://python-all.ru/2.7/library/bastion.html#Bastion.BastionClass).
