はじめに
Pythonでクラスを定義する際,第一引数の命名が self
なのはなぜだろうとずっと疑問に思ったので,調べて書き残しときます.
第一引数self以外ではダメ?
結論からするとダメです.PEP8(1)に インスタンスメソッドのはじめの引数の名前は常に self を使ってください。
と定義されています.ただし,動作上なら self
以外でもきちんと動きます.例はここ(2)を参考にしてます.
class Hoge():
def __init__(self_inplace_hoge, string):
self_inplace_hoge.string = string
print('self_inplace_hoge: ', self_inplace_hoge.string)
class Fuga(Hoge):
def __init__(self_inplace_fuga, string):
self_inplace_fuga.string = string
print('self_inplace_fuga: ', self_inplace_fuga.string)
hoge = Hoge('aaaa')
fuga = Fuga('bbbb')
print(hoge.string)
print(fuga.string)
self_inplace_hoge: aaaa
self_inplace_fuga: bbbb
aaaa
bbbb
動きはしますねルール違反なのでやったらだめですけど.
ちなみに self
の役割として見てみるとちゃんと定義したクラスがメモリのどこにあるか返してくれます意外と見てみると楽しい?
self_inplace_hoge: <__main__.Hoge object at 0x00000123D17C1CC8>
self_inplace_fuga: <__main__.Fuga object at 0x00000123D17C12C8>
さいごに
this
とか self
って誰でも好きな名前つけたらヤバイってなるからルールができたんだろうな~
ちょっとバズワードみたいですね.
参考資料
(1) pep8-ja
(2) self in Python class