Pythonでクラス内にPrivate変数を作成する方法

Pythonには他のオブジェクト指向言語(C++やJavaなど)にあるクラス内の変数を明確にPrivateにする方法はありません。

ただ、疑似的にPrivate変数を確保することはできます。

ただし注意して利用しないと思わない動作結果を招く可能性があります。

スポンサーリンク

Pythonでクラス内にPrivate変数を作成する

Pythonには他のオブジェクト指向言語(C++やJavaなど)のように「private」のようなキーワードはありません。

では、クラス内に「private」な変数が持てないかということ、そうではなくて疑似的には持てるようになっています。

その方法は「private」にしたい変数を「__(アンダーバー2つ)」を名前の前につけて宣言すると可能になります。

このように「__」を先頭につけるとprivate変数のような扱いになります。

具体的には「__」が付いた変数をインスタンスから直接呼ぶことができなくなります。

上記のプログラムを実行すると

変数としては「__name」が宣言されていそうですが、存在しない属性としてエラーになります。

ちなみに「__」でない変数にすると正常に表示されます。

なので「__」が付いた変数は外部から操作できないので、setterやgetterを用意してアクセスしてやることになります。

このプログラムを実行すると

になり、当然ですが「__」ありとなしとでは別の変数として確保されています。

上記の内容で注意点は

クラス内の「__」付きの変数とインスタンスに直接設定した「__」の付きの変数は別物

になっているということです。

ここを混乱させると思わぬ不具合を招く恐れがあるので注意しましょう。

ちなみに上記のプログラムで

という文を最後に実行すると当然

というエラーになります。

まとめ

Pythonではクラス内に「__(アンダーバー2つ)」を付加した変数を宣言することによって疑似的にPrivate変数を作成することができます。

ただし、

クラス内の「__」付きの変数とインスタンスに直接設定した「__」の付きの変数は別物

には要注意で扱うことが大切です。

以上、Pythonでクラス内にPrivate変数を作成する方法でした。

タイトルとURLをコピーしました