##はじめに
前回の記事でイメージのために人間クラスとか書いていた。折角だからコードで練習。
##コード
#クラスの定義
class Human:
def __init__(self,name='佐藤',age=25,place='東京'):
self.name = name
self.age = age
self.place = place
def info(self):
text = '{}さんは{}歳で、{}に住んでいます。'
return text.format(self.name, self.age, self.place)
#インスタンス化
human = Human()
#インスタンスから関数を実行
human.info()
東京に住んでいる佐藤さん(25)というありふれた自己紹介になった。今度は東京だとざっくりしすぎているから、もう少し説明を加えてみたい。そこでインスタンス化の時に引数を追加して説明を変えよう。
#インスタンス化
human = Human('佐藤','25','東京都葛飾区')
#インスタンスから関数を実行
human.info()
自分で指定したことで、デフォルトの値から変更されて東京都葛飾区に変更されたことがわかる。変える引数が1つだからといって、インスタンスに引数を1つだけしか入れないと第一引数だけ変更されておかしなことになる(これは確認)。
#インスタンス化
human = Human('東京都葛飾区')
#インスタンスから関数を実行
human.info()
東京都葛飾区さんが人物名になってしまった。クラス中で引数の順番を指定しているので、対応させて書かないといけないことがよくわかる。
super()による継承
上記で人間クラスを作成したので、これを利用して社会人クラスを作っていく。
#Humanクラスを継承して社会人クラスを作成
class Work(Human):
def __init_(self,name,age,place):
super().__init__(name,age,place) #親クラスからのオーバーライド
def company(self):
print('社会人です。')
#インスタンス化
work = Work()
#インスタンスから関数を実行
print(work.info()) #同時に表示するためprintで実行
work.company()
佐藤さんの属性に社会人が加わった。でも普通社会人です、で終わるのではなく所属会社や部署を伝えるはず。そこで社会人クラスに新しく引数を設定する。
#Humanクラスを継承して社会人クラスを作成
class Work(Human):
def __init_(self,name,age,place,working,department,title):
super().__init__(name,age,place) #親クラスからのオーバーライド
self.working = working
self.department = department
self.title = title
def company(self,working='〇×会社',department='営業部',title='一般社員'):
print('{0}の{1}に所属している{2}です。'.format(working,department,title))
#インスタンス化
work = Work()
#インスタンスから関数を実行
print(work.info()) #同時に表示するためprintで実行
work.company()
社会人らしい表現になったのでは。
その後佐藤さんは異動で別の部署になった。子クラスの引数を変更してみる。
#インスタンス化
work = Work()
#インスタンスから関数を実行
print(work.info()) #同時に表示するためprintで実行
work.company('○×会社','企画部','一般社員')
ちゃんと部署異動になったことがわかる。
##まとめ
Classそんなに使うのかな?defでよくない?と思っていたけど、実際にコードを書いてみるとクラスの継承ができるので、まとめられて便利かも。
ひとまず自分用の演習は終わり。
##参考
https://xtech.nikkei.com/atcl/learning/lecture/19/00108/00005/?P=2