レッスン3 / 4問目

『selfについて』

このレッスンではメソッドの第一引数に記述するselfについて学習していきましょう。

実はselfはインスタンス自身のことです。また、pythonではメソッドの第一引数にインスタンス自身を受け取ります。今回はこれらについて掘り下げて見ていきましょう。

前回使用した例題を参考にselfがインスタンス自身であることを説明していきます。

  1. class Dog:
  2.     def __init__(self, name):
  3.         self.name = name
  4. dog = Dog("ポチ")
  5. print(dog.name)
ポチ

上記は5行目でインスタンス化した際に"ポチ"がインスタンス変数として「self.name」に格納されるコードでした。ここで「__init__」の引数のnameに"ポチ"が代入されるという点はわかるかと思います。

ではselfの部分には何が代入されるのでしょうか。これは冒頭でも説明しましたが、ここにはインスタンス自身が代入されます。つまりインスタンスである「dog」が代入されるということです。以下のようにselfとnameにそれぞれインスタンスと"ポチ"が渡されます。

pythonのクラスのコード

これら「dog」と「ポチ」をそれぞれ「self」と「name」に当てはめると以下のようなイメージとなります。

  1. class Dog:
  2.     def __init__(dog, "ポチ"):
  3.         dog.name = "ポチ"
  4. dog = Dog("ポチ")
  5. print(dog.name)
ポチ

2, 3行目のように「dog」と「ポチ」をそれぞれ「self」と「name」に当てはめてみると、3行目の「dog.name」に「ポチ」が代入されているということがよくわかります。そして6行目のコードで代入したポチを呼び出しています。
ちなみに「dog.name」の「name」は引数に受け取ったnameとは関係ありません。この「name」はインスタンスの変数です。

例えば以下のようにこの「name」を「hoge」に変えても正しく「ポチ」が出力されます。

  1. class Dog:
  2.     def __init__(self, name):
  3.         self.hoge = name    # nameをhogeに変更
  4. dog = Dog("ポチ")
  5. print(dog.hoge)     # nameをhogeに変更
ポチ

そしてselfに関しても実はただの引数ですのでselfでなく任意の引数名でも動作します。しかし、pythonではselfと記述することが推奨されているためselfと記述することを推奨します。

ではselfに関してのレッスンは以上となります。

まとめ

selfに関して以下の2点を抑えておきましょう。

  • pythonの構造上メソッドの第一引数にはインスタンス自身が渡される仕様となっているため、引数としてselfを記述する。
  • そのためselfはインスタンス自身を表す

では練習問題にチャレンジしてみましょう。

Lesson1

"ミケ"と出力するコードをprint関数に記述してください。

Last updated:2019/10/28

ミケ
  1. class Cat:
  2. def __init__(self, name):
  3. self.name = name

  4. cat = Cat("ミケ")
  5. print(cat.name)
main.py
設定
g
n
i
d
a
o
L