【Python入門】クラスのインスタンス変数を隠す(マングリング)

クラスのインスタンス変数を設定した際に、通常の状態だと簡単にアクセスできます。

簡単にサンプルを書いてみます。
sampleA.pyというファイルで、クラス名はA。
インスタンス変数にself.xを設定し、self.xに代入したり取り出すためにゲッターとセッターも用意する。

def __init__でクラスAの初期化が行われる。
これは a = sampleA.A(10)を実行した時にクラスAのインスタンスが作成されたタイミングで呼ばれる。
sampleA.A(10)によってself.x = 10 というのが走ったことになる。

でも、このself.xというのは全く隠れていないので簡単に直接アクセスできてしまう。
@propertyによってゲッターを、@foo.setterによってセッターを定義したのに、そんなのすっ飛ばして直接出し入れできるのだからかたなしだ。

結論から言うと、クラス定義の外から見えないようにするためには2つのアンダースコア(__)が必要だ

@propertyでゲッターメソッド、@hogehoge.setterでセッターメソッドを定義できる。
ゲッターとセッターを定義するからには、直接インスタンス変数にアクセスしてほしくないだろうから、アンダースコア2つを使って直接アクセスを禁止する。

@properyのように@を利用するものをデコレータという。
デコレータの利点は、メソッドの中身を編集したとしても、そのメソッドを扱う側は特に変更する必要がなくなる点にある。

無料体験レッスン実施中

こちらも:Pythonでサービスを運用するならこのサーバー


約8,000名の受講生と80社以上の導入実績
プログラミングやWebデザインのオンラインマンツーマンレッスンCodecamp
<Codecampの特徴>
1 現役エンジニアによる指導
2オンラインでのマンツーマン形式の講義
3大手企業にも導入されている実践的なカリキュラム
★★無料体験レッスン実施中です。★★
こちらから

シェアする

  • このエントリーをはてなブックマークに追加

フォローする