2
2

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 3 years have passed since last update.

自分による自分のためのクラス練習

Posted at

##はじめに
前回の記事でイメージのために人間クラスとか書いていた。折角だからコードで練習。

##コード

#クラスの定義
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()

image.png

東京に住んでいる佐藤さん(25)というありふれた自己紹介になった。今度は東京だとざっくりしすぎているから、もう少し説明を加えてみたい。そこでインスタンス化の時に引数を追加して説明を変えよう。

#インスタンス化
human = Human('佐藤','25','東京都葛飾区')

#インスタンスから関数を実行
human.info()

image.png

自分で指定したことで、デフォルトの値から変更されて東京都葛飾区に変更されたことがわかる。変える引数が1つだからといって、インスタンスに引数を1つだけしか入れないと第一引数だけ変更されておかしなことになる(これは確認)。

#インスタンス化
human = Human('東京都葛飾区')

#インスタンスから関数を実行
human.info()

image.png

東京都葛飾区さんが人物名になってしまった。クラス中で引数の順番を指定しているので、対応させて書かないといけないことがよくわかる。

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()

image.png
佐藤さんの属性に社会人が加わった。でも普通社会人です、で終わるのではなく所属会社や部署を伝えるはず。そこで社会人クラスに新しく引数を設定する。

#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()

image.png

社会人らしい表現になったのでは。
その後佐藤さんは異動で別の部署になった。子クラスの引数を変更してみる。

#インスタンス化
work = Work()
#インスタンスから関数を実行
print(work.info()) #同時に表示するためprintで実行
work.company('○×会社','企画部','一般社員')

image.png

ちゃんと部署異動になったことがわかる。

##まとめ
Classそんなに使うのかな?defでよくない?と思っていたけど、実際にコードを書いてみるとクラスの継承ができるので、まとめられて便利かも。
ひとまず自分用の演習は終わり。

##参考
https://xtech.nikkei.com/atcl/learning/lecture/19/00108/00005/?P=2
 

2
2
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
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?