# 30.2. `Bastion` --- オブジェクトに対するアクセスの制限

バージョン 2.6 で非推奨: `Bastion` モジュールは Python 3 で削除されました。

バージョン 2.3 で変更: モジュールは無効化され、使えなくなりました。

注釈

このドキュメントは、Bastion モジュールを使用している古いコードを読む際の参照用として残されています。

辞書によると、バスチョン (bastion、要塞) とは、"防衛された領域や地点"、または "最後の砦と考えられているもの" であり、オブジェクトの特定の属性へのアクセスを禁じる方法を提供するこのモジュールにふさわしい名前です。制限モード下のプログラムに対して、あるオブジェクトにおける特定の安全な属性へのアクセスを許可し、かつその他の安全でない属性へのアクセスを拒否するには、要塞オブジェクトは常に `rexec` モジュールと共に使われなければなりません。

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

  オブジェクト object を保護し、オブジェクトに対する要塞オブジェクトを返します。オブジェクトの属性に対するアクセスの試みは全て、 filter 関数によって認可されなければなりません; アクセスが拒否された場合 `AttributeError` 例外が送出されます。

  filter が存在する場合、この関数は属性名を含む文字列を受理し、その属性に対するアクセスが許可される場合には真を返さなければなりません; filter が偽を返す場合、アクセスは拒否されます。標準のフィルタは、アンダースコア (`'_'`) で始まる全ての関数に対するアクセスを拒否します。 name の値が与えられた場合、要塞オブジェクトの文字列表現は `<Bastion for name>` になります; そうでない場合、 `repr(object)` が使われます。

  class が存在する場合、 `BastionClass` のサブクラスでなくてはなりません; 詳細は `bastion.py` のコードを参照してください。 `BastionClass` の標準設定を上書きする必要はほとんどないはずです。

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

  実際に要塞オブジェクトを実装しているクラスです。このクラスは `Bastion()` によって使われる標準のクラスです。 getfunc 引数は関数で、唯一の引数である属性の名前を与えて呼び出した際、制限された実行環境に対して、開示すべき属性の値を返します。 name は `BastionClass` インスタンスの `repr()` を構築するために使われます。