#オブジェクト指向をポケモンを例にわかりやすく
pythonを勉強して、僕が理解に苦しんだのが、classの概念。
プログラミングを長年やられている方は、Rubyなどもclassの概念を持つので、理解されているかと思いますが、経験の浅い僕にはイメージし難いものでした。
参考書を何度読んでも、クラスやらメソッド、インスタンスなど正直???となることばかりで、なかなかに嫌気をさしていました。
そこで、自分なりに簡単な言葉でわかりやすくまとめたいと思い、試行錯誤した結果、昔好きだったポケモンでまとめることが自分に腑に落ちたので、共有したいと思います。
##イメージとして・・・
ポケモンってどんな「モノ」か。僕らは知っていますが、コンピューターは知りません。
なので、コンピューターに対して、ポケモンってこんなものだよと教えてあげるイメージで書いていきます。
##コード例
#Pokemonという「もの」を、コンピュータに教える
class Pokemon(object):
#Pokemonの特徴を教える
#名前(name)と、レベル(level)と、体力(hp)があるよ
def __init__(self, name, level, hp):
self.name = name
self.level = level
self.hp = hp
#Pokemonに対して、させたいことを教える
#__init__で書いた特徴を、表示させたいな
def output(self):
print(self.name+":初期レベル"+str(self.level)+"、初期体力"+str(self.hp))
#ふしぎなアメを食べるとレベルが1上がる特徴を、表示させたいな
def eat(self, food):
if food == "ふしぎなアメ":
self.level += 1
print(self.name+"は、"+food+"を食べてレベルが"+str(self.level)+"になった")
#Pokemonには、ピカチュウという名前(name)の「もの」がいると、コンピュータに教える
#ピカチュウのレベル(level)は5で、体力(hp)は100なんだ
Pikachu = Pokemon("ピカチュウ", 5, 100)
#ピカチュウの特徴を表示させる
Pikachu.output()
#ピカチュウにふしぎなアメを食べさせる
Pikachu.eat("ふしぎなアメ")
>>>ピカチュウ:初期レベル5、初期体力100
>>>ピカチュウは、ふしぎなアメを食べてレベルが6になった
#解釈
#Pokemonという「もの」を、コンピュータに教える
class Pokemon(object):
#Pokemonの特徴を教える
#名前(name)と、レベル(level)と、体力(hp)があるよ
def __init__(self, name, level, hp):
self.name = name
self.level = level
self.hp = hp
#Pokemonに対して、させたいことを教える
#__init__で書いた特徴を、表示させたいな
def output(self):
print(self.name+":初期レベル"+str(self.level)+"、初期体力"+str(self.hp))
#ふしぎなアメを食べるとレベルが1上がる特徴を、表示させたいな
def eat(self, food):
if food == "ふしぎなアメ":
self.level += 1
print(self.name+"は、"+food+"を食べてレベルが"+str(self.level)+"になった")
ここで、ポケモン「Pokemon」って、どんな「モノ」で、どんなことができるのかを、コンピューターに教えてあげます。
それがまとまったものが、クラス(class)です。
ポケモン「Pokemon」ってどんな「モノ」なの?何をするの?何ができるの?など、特徴をまとめたのが、「def〜」で書かれた項目であり、メソッドと呼ばれるやつです。
##まとめ
あくまで僕がイメージしやすいようにまとめたので、きちんと理解するには不足なこともあるかもしれませんが、クラス?メソッド?などで迷ったら、参考にしてください。