#今回書くこと
今回は技術的なことはほとんど喋りません。緩めです。お許しください。
さて、Pythonの学習を一昨日くらいに始めまして
とりあえずお馴染みのProgateやってみようと思い
さっき、Ⅰ~Ⅴまで、やり終えました。
Rubyの知識があったのでほとんど「Rubyでやったところだ!」と思いながら、学習していた感じです。
##クラスとは
さて、クラスという概念をご存知でしょうか。Python, Rubyといったほとんどの言語で採用されている概念であり、オブジェクト指向の言語には必ずと言っていいほど存在します(しない言語もあります。)
クラスは、よく設計図と呼ばれたりします。
Pythonだとこんな感じです。(細かいところは、Progateをやれば絶対わかるのでぜひそちらで。)
class RobotDog:
def __init__(self, type):
self.type = type
def cry(self):
print("ワン!")
こんな感じで、もし犬のロボットを作る時に、設計図としてRobotDog
クラスを作っておけば、
class RobotDog:
def __init__(self, type):
self.type = type
def cry(self):
print("ワン!")
robot_dog1 = RobotDog("ラブラドールレトリバー") #ラブラドールレトリバーの形をしたロボットドッグ1号を作りました。
このようにして、ロボットドッグを実際に作ることができたり
class RobotDog:
def __init__(self, type):
self.type = type
def cry(self):
print("ワン!")
robot_dog1 = RobotDog("ラブラドールレトリバー") #ラブラドールレトリバーの形をしたロボットドッグ1号を作りました。
robot_dog1.cry() #ロボットドッグ1号に「”ワン!”」と鳴いてもらいました。
print(robot_dog1.type) #→ラブラドールレトリバー
とすることで、作ったロボットドッグ1号にワン!と鳴かせることも可能になります。
このように、クラスは設計図のようなものであり、言い換えれば
**生みの親
**とも言い換えることができます。
##クラスの継承
さて、なんとなくクラスが分かってもらえたでしょうか。
クラスは、生みの親
でも、そのクラスの中にも親子関係が存在します。
こんな感じです。
class Robot:
def __init__(self, parts, engine):
self.parts = parts
self.engine = engine
こういう風に、RobotDogクラス
の親となるRobotクラス
を作ります。
そしたら、先ほどのRobotDogクラスに継承を行います。
from robot import Robot #このように、Robotという親となるクラスを呼び出し
class RobotDog(Robot): #Robotクラスを継承させることができます。
def __init__(self, type):
self.type = type
def cry(self):
print("ワン!")
robot_dog1 = RobotDog("ラブラドールレトリバー") #ラブラドールレトリバーの形をしたロボットドッグ1号を作りました。
robot_dog1.parts = "足が4本"
robot_dog1.cry() #ロボットドッグ1号に「”ワン!”」と鳴いてもらいました。
print(robot_dog1.type) #→ラブラドールレトリバー
print(robot_dog1.parts) #→足が4本
こうすることで、クラスに親子関係を作り、子は親のインスタンスメソッドと呼ばれる機能(def~
から始まっている塊)を利用できるようになります。
##人間の親子も
さて、なんとなくクラスと、クラスの継承について理解していただけたでしょうか。
ひとまずここまでをまとめると
- クラスは、設計図である。
- クラス同士で、親子関係を作ることができる。
と理解していればOKです。
僕はこの時ふと思いました。
####これって、人間のやっていることだよな...
例えば、親は子に箸の持ち方を教えますよね。これは、**「箸の持ち方を、継承している」**のではないでしょうか。
というか、親は大半のことを、子どもに「継承」しているはずです。それが一つの教育だと思います。
しかし、子どもは環境や必要に応じていろいろな形に変化しますよね。
これも実は、プログラミングで実際に行われることだったりします。
##オーバーライド
プログラミングでは、これをオーバーライドと言います。
実際には、このように行います。
まず、親のRobotクラス
にsoundインスタンスメソッド
を追加します。
class Robot:
def __init__(self, parts, engine):
self.parts = parts
self.engine = engine
def sound(self):
print("ウィーン")
def sound(self)
と書かれているところがそれに該当します。
そして、継承済みのRobotDogクラス
で、呼び出しを行います。
from robot import Robot
class RobotDog(Robot):
def __init__(self, type):
self.type = type
def cry(self):
print("ワン!")
#(中略)
robot_dog1.sound() #ウィーン
しかし、これを子どもの方だけで変更することが可能です。
犬の稼働音がウィーンだと怖いので
from robot import Robot
class RobotDog(Robot):
def __init__(self, type):
self.type = type
def cry(self):
print("ワン!")
def sound(self):
print("タッタッタ")
#(中略)
robot_dog1.sound() #タッタッタ
と言う風に、犬の足音風にしてあげました。この時、元々の「ウィーン」は親の方で変更されません。
####つまり、子どもは必要に応じて変化することができます。しかも、本質的には親に影響を与えたりしません。
これはプログラミングの話ですが、プログラミング言語を作ったのも人間です。
プログラミングの仕組みを考えた方はどう思っていたかわかりませんが、
僕は、こう言う解釈の仕方があっても良いんじゃないかなと思いました。
##子どもの自立を見守る大人になりたいと思った
ぼくは結婚もしてないし、子供もいません。
それでも、至る所に教育は存在し、根幹となります。大切なことではないかと思います。
####クラスの親子関係のように、子供が変化する様子を見守れる大人になりたい。
今回は、ちょっとポエってみました。
##最後に
最後まで読んでいただき、ありがとうございます。
ソースコード、記事の書き方について「もっとこうしたほうがいいよ!」というご意見、「そこどうなっているの?」というご質問など、お待ちしております。