# 12.2 Standard Module `Bastion`

According to the dictionary, a bastion is ``a fortified area or position'', or ``something that is considered a stronghold.'' It's a suitable name for this module, which provides a way to forbid access to certain attributes of an object. It must always be used with the `rexec` module, in order to allow restricted-mode programs access to certain safe attributes of an object, while denying access to other, unsafe attributes.

`Bastion` (object[, filter, name, class])
  Protect the class instance object, returning a bastion for the object. Any attempt to access one of the object's attributes will have to be approved by the filter function; if the access is denied an AttributeError exception will be raised.

  If present, filter must be a function that accepts a string containing an attribute name, and returns true if access to that attribute will be permitted; if filter returns false, the access is denied. The default filter denies access to any function beginning with an underscore (`_`). The bastion's string representation will be `<Bastion for name>` if a value for name is provided; otherwise, `repr(object)` will be used.

  class, if present, would be a subclass of `BastionClass`; see the code in ``bastion.py`' for the details. Overriding the default `BastionClass` will rarely be required.