【Python】クラス内で宣言した変数をクラス内外での参照・書き換える方法

時計 2020.07.04 / 時計

【Python】クラス内で宣言した変数をクラス内外での参照・書き換える方法

Pythonでオブジェクト指向を考えてプログラムを作ると、クラスの使い方は必須となります。大規模なプログラムを作るうえでも、クラスの使用は避けて通ることはできません。

今回はクラスの使い方の中で、宣言した変数をクラス内外でどのように参照・書き換えるのかを詳しく解説していきます。

Pythonの勉強をしてプログラムを作っていたけど、実はクラスを使うのを避けていました、という人は案外多いのではないでしょうか。
そんな人はぜひ今回変数の使い方をマスターして、今後クラスを使うようにしてみてください。

Pythonにおけるクラスの基本については以下記事をご覧ください。

クラス内の変数(クラス変数・インスタンス変数)

クラスにはどこで変数を宣言したかによって種類が変わります。

クラスにはクラス変数とインスタンス変数の2種類があります。

変数の種類によって、宣言方法や参照方法が異なるのでまずはそれぞれの変数について確認しましょう。

クラス変数

クラスを定義したすぐ下で変数を宣言すると、それはクラス変数になります。

class Office54:
    クラス変数 = 値

このクラス変数の特徴としては、すべてのインスタンスでこのクラス変数を共有している、ということです。

例えば上記のOffice54クラスからインスタンスを複数作成したとしても、各インスタンスは同じクラス変数を共有しているということです。
クラス変数はただ1つしか存在しないということです。

クラス変数のイメージとしては以下のような感じです。

Pythonにおけるクラス変数のイメージ

インスタンス変数

インスタンス変数は、クラスのメソッド内で変数を宣言したものです。
基本的にはコンストラクタ__init__()内でインスタンス変数の宣言を行います。

class Office54:
    def __init__(self):
	# インスタンス変数の宣言 #
        self.python = 54

インスタンス変数の特徴として、各インスタンスでインスタンス変数を共有しません。

クラス変数は各インスタンスで共有しますが、インスタンス変数はクラス変数とは違い、インスタンス毎に異なる値を持つことができるということですね。

インスタンス変数のイメージとしては以下のような感じです。

Pythonにおけるインスタンス変数のイメージ

クラス変数のアクセス方法

クラス外からクラス変数にアクセスするときは以下のように記述します。

クラス.クラス変数

実際にクラス変数にアクセスできるのかサンプルプログラムを見てみましょう。

# クラス外でクラス変数にアクセス #
class Office54:
    python = 54    # クラス変数
print(Office54.python)    # クラス変数にアクセス
結果

54

クラスをインスタンス化した場合は、以下のようにしてクラス変数にアクセスすることができます。

# インスタンスからクラス変数にアクセス #
class Office54:
    python = 54
x = Office54()
print(x.python)
結果

54

クラス内のメソッドからクラス変数にアクセスする場合は、
self.クラス変数名
と記述します。

# クラス内のメソッドからクラス変数にアクセス #
class Office54:
    Python = 54
    def FiveFour(self):
        print(self.Python)
x = Office54()
x.FiveFour()
結果

54

上記の方法でクラス変数にはアクセスすることができます。

インスタンス変数へのアクセス方法

クラス外からインスタンス変数にアクセスする場合は、インスタンス化した変数にインスタンス変数名を.(ドット)のあとに続けて記述することでできます。

インスタンス.インスタンス変数名

以下にサンプルプログラムを記します。

class Office54:
    def __init__(self):
        self.python = 54
x = Office54()
print(x.python)
結果

54

クラスのメソッドからインスタンス変数にアクセスする場合は、以下のサンプルプログラムのようにクラス変数と同じ方法を取ります。

class Office54:
    def __init__(self):
        self.python = 54
    def FiveFour(self):
        print(self.python)
x = Office54()
x.FiveFour()
結果

54

まとめ

クラス内には変数が2種類、クラス変数・インスタンス変数があります。
変数によってちょっとした違いがありましたよね。

インスタンスで共有するのか、別々に値を持つかですね。

変数にアクセスする方法もいろいろありましたが、プログラムを実際に作りながら復習していけば、おのずと覚えていきます。

ぜひ、クラスを存分に使ったプログラムを作成してみてください。