レッスン2 / 4問目

『インスタンス変数』

このレッスンではコンストラクタを用いてインスタンス変数を扱っていきましょう。

まずはインスタンス変数とは何かについて見ていきましょう。
インスタンス変数とはインスタンス生成時にインスタンスに保存される変数です。少し難しく聞こえるかもしれませんが、これは犬が産まれた時に名前が付けられたり性別が決まるのと同じでインスタンスが生成された際にそれぞれインスタンス毎に個別の情報が付加されるのですが、これがインスタンス変数です。

ではDogクラスの例を見ていきましょう。以下の例ではコンストラクタの処理に記述してある3行目の「self.name = name」という部分がインスタンス変数を保存しているコードです。

  1. class Dog:
  2.     def __init__(self, name):
  3.          self.name = name    # インスタンス変数が生成される処理
  4. dog = Dog("ポチ")    # コンストラクタに引数が渡される

では、順番に説明していきます。まず、2行目の「def __init__(self, name)」この部分の処理がインスタンス生成時に自動で呼び出されるコンストラクタでした。そしてコンストラクタの括弧内を見ていただくと引数nameを受け取ることがわかります。このnameが3行目の「self.name = name」の部分で使用されていますが、この処理における「self.name 」がインスタンスに保存されるインスタンス変数です。つまりインスタンス化した際に受け取る引数がインスタンス変数として保存されるということです。

ではインスタンスが生成される際の流れですが、5行目を見ていただくとインスタンス生成時に引数に「ポチ」を受け取っています。この「ポチ」が2行目の「def __init__(self, name)」のnameに渡され、3行目の「self.name = name」の部分で代入され、インスタンス変数として保存されています。ここまでがインスタンス変数が生成されるまでの流れとなります。

そしてこのインスタンス変数はインスタンス化した後にメソッドと同様に呼び出すことができます。それには以下のように「インスタンス名.インスタンス変数」と記述します。

  1. print(dog.name)
ポチ    # インスタンス変数の値が出力される

インスタンス生成後、上記のようにインスタンス変数を扱うことができます。

では次はクラス内で定義された他のメソッドからインスタンス変数を呼び出す例を見ていきましょう。以下では4, 5行目でwalkメソッドを定義しその中でインスタンス変数が呼び出されています。そして8行目でそのwalkメソッドが呼び出されています。

  1. class Dog:
  2.     def __init__(self, name):
  3.         self.name = name
  4.     def walk(self):
  5.         print(self.name + "は散歩をしている")
  6. dog = Dog("ポチ")
  7. dog.walk()     # walkメソッドが呼び出される
ポチは散歩をしている

上記5行目のように「self.name」とすることで同じクラス内のインスタンス変数を呼び出すことができます。

以上がインスタンス変数を使用方法でした。
では練習問題にチャレンジしましょう。

Lesson1

エディタの3, 4行目ににコンストラクタを記述し、以下のように「ミケは散歩をしている」と出力してください。

回答は上記の例題を参考にしてください。今回は既にメソッドが用意されているため、コンストラクタでインスタンス変数を作る処理を記述します。

ミケは散歩をしている

Last updated:2019/10/28

ミケは散歩をしている
  1. class Cat:
  2. def __init__(self, name):
  3. self.name = name
  4. def walk(self):
  5. print(self.name + "は散歩をしている")

  6. cat =Cat("ミケ")
  7. cat.walk()
main.py
設定
g
n
i
d
a
o
L