Python の self キーワード

Muhammad Waiz Khan 2021年3月5日
Python の self キーワード

このチュートリアルでは、Python における self キーワードの目的と使い方を説明します。オブジェクト指向プログラミングでは、クラスがあり、各クラスは様々な属性やメソッドを持っています。オブジェクトやクラスのインスタンスを作成する際には、インスタンスの属性を初期化するためにコンストラクタ(Python では __init__() メソッド)が呼ばれます。

クラスのインスタンスを作成する際には、インスタンスの属性を引数や他の変数と区別したり、指定したりする必要があります。そこで、インスタンスの属性に値を渡しているのであって、ローカル変数や同名の引数に値を渡しているのではないことを指定するために、self キーワードが必要になります。

例えば、car クラスの color 属性を初期化するために __init__() メソッドに引数 color を渡すと、インスタンスの color 属性を self.color と指定します。

同様に、car クラスの self.start() メソッドのように self キーワードを使ってクラスのインスタンスメソッドを呼び出すこともできます。つまり、self キーワードを使うことで、ユーザはクラスのインスタンスの属性やメソッドを指定したり、アクセスしたりすることができるということです。

Python における self キーワードの使い方とサンプルコード

ここで、self キーワードが Python でどのようにしてインスタンスのメソッドや属性を指定するのか、サンプルコードを見てみましょう。

以下の最初の例では、self キーワードが __init__() メソッドでどのようにしてインスタンスの属性を初期化するのかを示しています。初期化や値の代入の前に変数を宣言したり作成したりする必要はないので、以下のようにしてインスタンスの属性を初期化することができます。

class car:
    def __init__(self, model, color):

        self.model = model
        self.color = color


mycar = car("model XYZ", "red")
print(mycar.model)
print(mycar.color)

出力:

model XYZ
red

上で見たように、__init__() メソッドはクラスのインスタンスを作成する際に自動的に呼び出され、そのインスタンスの属性が初期化されます。self はインスタンスのメソッドや属性にアクセスするためのメソッドのパラメータである必要があります。

以下の例では、self キーワードを使って Python の他のクラスメソッド内でインスタンスやクラスメソッドを呼び出す方法を示します。

class car:
    def __init__(self, model, color):

        self.model = model
        self.color = color

        self.start()

    def start(self):

        print(self.model + ", has started!")


mycar = car("model XYZ", "red")

出力:

model XYZ, has started!

上の例と同様に、self キーワードを使ってクラスメソッドを呼び出し、クラスのインスタンスを self パラメータとして渡すことで、任意のクラスメソッドの属性にアクセスすることができます。

関連記事 - Python Keyword