0
0

More than 3 years have passed since last update.

[Python]Classの第一引数はなぜselfなの?

Posted at

はじめに

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

0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0