Pythonのクラスに用いられるprivate変数の利用方法を現役エンジニアが解説【初心者向け】

初心者向けにPythonのクラスに用いられるprivate変数の利用方法について現役エンジニアが解説しています。privateはアクセス修正子でクラス内でしかアクセスできないことを意味しています。Pythonの場合は、変数の前にアンダーバーを2つつけて表現します。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,000以上あります。

Pythonのクラスに用いられるprivate変数の利用方法について解説します。

Pythonについてそもそもよく分からないという方は、Pythonとは何なのか解説した記事をまずご覧ください。

 

なお本記事は、TechAcademyのPythonオンライン講座の内容をもとにしています。

 

田島悠介

今回は、Pythonに関する内容だね!

大石ゆかり

どういう内容でしょうか?

田島悠介

Pythonのクラスに用いられるprivate変数の利用方法について詳しく説明していくね!

大石ゆかり

お願いします!

この記事ではPythonのクラスで使われるprivate変数について解説します。クラスの概念も説明するので、「クラスって何?」と疑問も持たれる方も理解できるのではないかと思います。

クラスとは?

プログラミング言語には様々な種類がありますが、特徴ごとにいくつかのグループに分けることができて、その1つが「オブジェクト指向言語」と呼ばれるグループです。

この「オブジェクト指向」のグループのプログラミング言語には「クラス」という概念があります。「クラス」を理解するためには、通常の変数との違いを比較するのが良いでしょう。

通常の変数はデータだけを持っています。例えば、数値や文字列などです。これに対してクラスは、データのみではなく「メソッド」と呼ばれるデータの操作方法やその他のツールを持っています。

このように「オブジェクト指向」では、操作対象に重点をおいたプログラミングを行ないます。

private変数とは?

また、クラスの概念に付随するものとしてprivate変数 というものがあります。これは、’private’という言葉の意味の通りに、外部から操作することのできない変数です。

通常では、クラスの保持するデータは、外部からかんたんに変更することができると好ましくないので、private変数にします。変数を外部からかんたんに変更できると好ましくないことの理由は、銀行の預金データを保持するクラスの例を考えるとわかりやすいです。

預金額は、お金を預けるか、お金を引き下ろしたときにのみ変化します。この預金額の値を外部からかんたんに変更できた場合には、信頼性が大きく損なわれます。ですので、やはりクラスの変数はかんたんに変更できないようにしておくべきでしょう。

Javaなどのプログラミング言語では変数の前にprivateをつけるので、private変数であることがひと目で分かりますが、Pythonの場合は、変数の前に__(アンダーバー×2)をつけて表現します。

[PR] Pythonで挫折しない学習方法を動画で公開中

クラスにprivate変数を利用して記述してみよう

それでは、クラスにprivate変数を実実装してみます。今回は、インスタンス変数を使います。

本来はクラス変数とインスタンス変数の区別をきちんとしなければならないのですが、今回はあまり気にせず、言葉だけ知っておくだけで十分でしょう。

まずは、クラスを作りましょう。

class BankAccount():
    def __init__(self, name ,money):
         self.myname = name        #通常の変数:名前
         self.__mymoney = money    #private変数:金額
     def confirm(self):    #確認用メソッド
         print(self.myname)
         print(self.__mymoney)

このクラスは銀行の口座のクラスです。

__init__というのは、コンストラクタと呼ばれるクラスを作り出すものです。nameとmoneyに名前と預金額を代入して作ります。

selfというのは、クラスを作るときに必要なおまじないのようなものだと思ってください。mynameは通常の変数で、__mymoneyはprivate変数です。confirm()とはメソッドで、外部から呼び出して銀行口座の名前と預金額を確認するためのものです。

試しに、銀行口座を1つ作ってみて、private変数と通常の変数の違いを確かめてみましょう。

account1 = BankAccount('Taro', 10000)

account1.confirm()

account1.myname = 'Ziro'    #名前の変更

account1.confirm()

account1.__mymoney = 20000    #金額の変更

account1.confirm()

を実行すると、

Taro
10000
Ziro
10000
Ziro
10000

と表示され名前は変更できますが、private変数である金額は変更できないので金額は変化しないことが確認できます。private変数を変更したい場合には、そのためのメソッドを用意する必要があるので、クラスに次のように記述を追加します。

class BankAccount():
    def __init__(self, name ,money):
         self.myname = name        #通常の変数:名前
         self.__mymoney = money    #private変数:金額
     def confirm(self):    #確認用メソッド
         print(self.myname)
         print(self.__mymoney)
    def withdraw(self, money):    #引き降ろしメソッド
        self.__mymoney += money
    def deposit(self, money):    #預け入れメソッド
        self.__mymoney -= money

withdraw()というメソッドはお金を引き出すためのもので、deposit()というメソッドはお金を預け入れるためのものです。このようにprivate変数を変更するためには、それをどのように変更するかクラス内にあらかじめ記述しておく必要があります。

account1 = BankAccount('Taro', 10000)
account1.withdraw(5000)  #引き降ろし
account1.confirm()
account1.deposit(2000)  #預け入れ
account1.confirm()

これを実行すると、

Taro
5000
Taro
7000

と表示され、private変数が変更されていることが確認できると思います。Pythonにおけるクラスとprivate変数について説明しました。オブジェクト指向プログラミングでは重要な概念なので覚えておきましょう。

監修してくれたメンター

小倉翔悟(おぐらしょうご)

AIプログラミングを使って開発を行う大学3年生。

プログラミング歴は約3年でPythonは割と得意。好きな物理理論は一般相対性理論で動物も好き。

 

大石ゆかり

内容分かりやすくて良かったです!

田島悠介

ゆかりちゃんも分からないことがあったら質問してね!

大石ゆかり

分かりました。ありがとうございます!

 

オンラインのプログラミングスクールTechAcademyではPythonを使って機械学習の基礎を学ぶPythonオンライン講座を開催しています。

初心者向けの書籍を使って人工知能(AI)や機械学習について学ぶことができます。

現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。

また、現役エンジニアから学べる無料のプログラミング体験会も実施しているので、ぜひ参加してみてください。