4
6

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 1 year has passed since last update.

Pythonのクラス学習。オブジェクト指向と継承

Last updated at Posted at 2022-08-04

初めに。

どうもpython歴4か月の者です。少し前にクラスについての勉強しました。
今度はオブジェクト指向についてまとめて行こうと思います。
中々苦手意識とは消えないもので…、さらに概念的な要素含まれており説明できるか不安ですが、頑張ります。

  • 恐縮ですが今回は前回記事のコードや考え方を踏襲致します。

  • 環境:windows

学習

参照コード 参考はこちら

class Student:                                #クラスの定義

    def __init__(self,name,math,english):     #コンストラクタ(初期化)メソッド。
        self.name = name                      #アトリビュートの設定
        self.math = math                      #アトリビュートの設定
        self.english = english                #アトリビュートの設定
    
    def avg(self):                            #avgメソッド
        return (self.name+"さんの平均点は"+  str((self.math + self.english)/2))

a001 = Student("sato",50,70)    #インスタンスとアトリビュート(変数)の代入。クラス呼出(実行)
a002 = Student("tanaka",40,90)
a003 = Student("yamakawa",50,60)

学習

オブジェクト指向とは?

オブジェクトを作成/利用してコードを書くこと

  • オブジェクト:実体。インスタンス。
  • 利点:変更に強い。個々に修正するのではなく大元の関数/クラスを変更すれば各々の変数も変更できる。

なんとなくクラス/関数に似ているな…とぼんやり感じて頂ければ幸いです。

ステップ①

まずはこの記事の「オブジェクト指向の用語を解説」まで読んでください。
その後に参照コード(できれば記事も)と下記画像を結び付けてイメージを沸かしてください。今回やりたかったのはこれでです。

2022-08-03_14h55_22.png

この相乗効果によりクラスとオブジェクト理解が深まれば幸いです。

継承について。

ついでに継承も学習しましょう。同様のコードで一括で理解できればお得感ありますので。

用語確認

あるクラスで使用した部分を別のクラスに持ち越して使用する事。名前の通り継承。Aクラスで使用したものをBクラスで継承(使用) する事。

  • 親クラス:継承される側。上記の例でいうAクラス
  • 子クラス:継承する側。 上記の例でいうBクラス

実際に具体例を確認してみましょう。上の参照コードを親クラスとして、下のクラス Keishoを子クラスとします。

class Keisyo(Student):                                #クラスの定義
    def add_sum(self):                                #add_sumメソッド
        return (self.name+"さんの合計点は"+  str((self.math + self.english)))
  • 引数に注目してください。子クラス(親クラス) という図式です。
  • __init__が省略されています。⇒便利!!この部分が継承されているという訳です。

それでは実際に継承されたクラスKeishoを使用してみましょう。

class Keisyo(Student):                                #クラスの定義
    def add_sum(self):                                #add_sumメソッド
        return (self.name+"さんの合計点は"+  str((self.math + self.english)))

a001 = Keisyo("sato",50,70)     #インスタンス作成とアトリビュート(変数)の代入。クラス呼出(実行)
a002 = Keisyo("tanaka",40,90)   #インスタンス作成とアトリビュート(変数)の代入。クラス呼出(実行)
a003 = Keisyo("yamakawa",50,60) #インスタンス作成とアトリビュート(変数)の代入。クラス呼出(実行)

print(f"{a001.add_sum()}\n{a002.add_sum()}\n{a003.add_sum()}")
print()

継承してるとは言えど、新たにインスタンス作成はしなければなりません。

出力結果

satoさんの合計点は120
tanakaさんの合計点は130
yamakawaさんの合計点は110

終わりに

継承の部分が少し自分でも理解が足りず説明しきれていない感触でした。
説明/補足追加予定ですので、より分かりやすく説明できるよう善処致します。

参照

4
6
5

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
4
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?