オブジェクト指向 中級

57. コンストラクタ(__init__)とself

__init__は「インスタンスが生まれた瞬間」に呼ばれる特別なメソッド

前のレッスンでは、インスタンスを作った後に dog1.name = 'ポチ' のように、後から情報を付け足していました。しかし、犬を作るたびに毎回同じことを書くのは面倒ですし、名前を付け忘れる犬が出てきてしまうかもしれません。そこで使うのが__init__という特別なメソッドです。これはコンストラクタと呼ばれ、Dog('ポチ')のようにインスタンスを作った瞬間、自動的に呼び出されます。

selfって何者?

クラスの中のメソッドを見ると、必ず最初の引数にselfと書かれています。selfは「これから作られる(あるいは操作されている)自分自身のインスタンス」を指す特別な引数です。self.name = nameと書くことで、「このインスタンス自身が持つnameという情報」として値を保存しています。最初は不思議に感じるかもしれませんが、「そのインスタンス自身」を指す合言葉のようなものだと考えてください。

サンプルコード

class Dog:
    def __init__(self, name):
        self.name = name

dog1 = Dog('ポチ')
dog2 = Dog('コロ')
print(dog1.name)
print(dog2.name)
Dog('ポチ')と書いた瞬間に__init__が自動的に呼ばれ、引数のnameが self.name としてそのインスタンスに保存されます。dog1とdog2はそれぞれ別々の名前を持つ、独立したインスタンスになっています。

📝 練習問題

練習問題:__init__でname属性を持つPersonクラスを定義し、'山田'という名前でインスタンスを作って表示してください。