selfとは
selfはpythonでclassを作るときに使われるものだが、これは実際selfという文字でなくてもよい。慣習的にselfを使うようになっているということだ。
そして、selfというのは自分自身とよく言われるがこれでは誤解が生まれてしまうと思う。classをひとつ作ってselfを返すメソッドを書いて試してみれば分かるが、selfはその時点での自分である。
そしてその自分自身というのは、意図的に変更することができる。
自分自身の変更
sample.py
# -*- coding: utf-8 -*-
class Hoge:
def __init__(self, a):
self.__a = a
def call(self):
print(self.__a)
ins = Hoge(1)
ins.call() # 1
上記のコードは一般的なプログラムである。
しかしこのような書き方もできる。
sample2.py
# -*- coding: utf-8 -*-
class Hoge:
def __init__(self, a):
self.__a = a
def call(self):
print(self.__a)
ins = Hoge(1)
Hoge.call(ins) # 1
これはselfに直接オブジェクトを渡しているためこのような結果になる。
勿論こんな変なことも出来る。
sample3.py
# -*- coding: utf-8 -*-
class Hoge:
def __init__(self, a):
self.__a = a
def call(self):
print(self.__a)
ins = Hoge(1)
ins2 = Hoge(2)
ins.call() # 1
ins2.call() # 2
Hoge.__init__(ins, 3)
ins.call() # 3
まとめ
もちろんこんな変なこと普通しないよ!というのはもっともだと思うが、個人的には面白いな~と思う。
pythonをなんとなく書いてる人には少し新鮮なのではないだろうか。