pythonは、いっそ、「すべてがオブジェクトなのだ」と思ってしまいたい。
インスタンスも、もちろん、オブジェクトだ。
で、インスタンスがつくられるとき、インスタンスのなかに、じぶん自身がつくられる、というのが、とても分かりにくかったりする。
なにも、これは、ぼくだけでなく、ネットをチェックしてみると、同意見のひとが少なくないんだね。
まずは任意のクラスをつくり、インスタンス化のあと、わざと、エラーを出してみよう。
# クラスをつくる
class Food:
def curry():
print("インドカレー")
# インスタンスをつくる
food= Food()
#インスタンスからメソッドを呼び出す
food.curry()
#つぎのようなエラーメッセージがでる
----> 1 food.curry()
TypeError: curry() takes 0 positional arguments but 1 was given
food.curry( )は引数をとらない。けれど引数が与えられている。
引数が与えられている? なんだろう?
じつは…インスタンスが作られるとき、第一引数に自分自身が引数として与えられている、というんだなぁ…このへんは、ほーんとに、わかりずらい。
ま、良くわからないまま、クラス側のメソッドに引数を明示的に入れる、というんですねぇ。で、pythonでは、このさい、selfという文字をつかうことが慣習となっている。
オッケー。さきほどのコードを書きなおしてみようか。
# クラスをつくる
class Food:
def curry(self):
print("インドカレー")
# インスタンスをつくる
food= Food()
#インスタンスからメソッドを呼び出す
food.curry()
インドカレー
こんどはエラーにならない。