24
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonのselfについての理解

Posted at

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をなんとなく書いてる人には少し新鮮なのではないだろうか。

24
29
0

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
24
29

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?