Python 独習メモ「クラス」

"Pythonプログラミング VTuber サプー"さんの動画でpythonの勉強をしていて、これは復習のためのメモです。

今回のは手強かった。多分理解はできたけど、覚えるのは超苦労しそう(^^;)


クラス

クラスとは?

成績表クラス(ある生徒の3教科の平均点を求める設計図みたいなもの)

・生徒の名前

・数学の点数 ・国語の点数 ・英語の点数

3教科の平均点を計算する(関数)


Aさん 成績表(オブジェクト(インスタンス))

田中 A

100点  60点  30点

3教科の平均点を計算する関数を呼び出すと答えが得られる。


Pythonではどのように書くか?

            ↓クラス名(大文字はじまり)

class SchoolReport:

    ・インスタンス変数(オブジェクトごとに違うデータ:名前、点数とか)

    ・メソッド(クラスが持っている関数: 3教科の平均点を計算)


メソッドの書き方

class SchoolReport:

    def function(self):

        x = 10 + 20

       print('処理が終了')

        return x

「self」はメソッドの第1引数と呼ばれ、必ず必要。



イニシャライザ(クラスの特殊なメソッド(コンストラクタ))

クラスのオブジェクトが作られるタイミングで1回だけ呼び出される。(オブジェクトの初期化)

イニシャライザはインスタンス変数に値を代入するのによく使われる。

class SchoolReport:

def __init__(self):


インスタンス変数の作り方

class SchoolReport:

def __init__(self):

    self.インスタンス変数名


具体的に書くと....

class SchoolReport:

    def __init__(self, student_name):

        self.student_name = student_name


このクラスのオブジェクトをつくるとすると、下のようになる。

()の中の「田中 A」は、イニシャライザの引数になる

sr = SchoolReport('田中 A')

srからstudent_nameにアクセスする方法は、

sr.student_name

と記述する。



以上のコードを動かすと.....

class SchoolReport:

    def __init__(self, name):

        self.student_name = name


sr = SchoolReport('田中 A')

print(sr.student_name)

田中 A


イニシャライザだけでなく、メソッドを加えたコード

class SchoolReport:

    def __init__(self, name, math, jp, en):

        self.student_name = name

        self.math_score = math

        self.jp_score = jp

        self.en_score = en

    def calc_avg_score(self):

        sum_score = (self.math_score + self.jp_score + self.en_score)

        avg_score = sum_score / 3

        return avg_score


sr = SchoolReport('田中 A', 100, 80, 70)

avg = sr.calc_avg_score()     #メソッドの呼び出し

print(avg)

83.33333333333333


クラス変数

オブジェクトで共通した値

class SchoolReport:

    クラス変数名(学校の名前とか: メソッドの外に書く!)

    def __init__(self, student_name):

        (省略)

    def calc_avg_score(self):

        (省略)


クラス変数にアクセスするには、

SchoolReport.school_name


クラスの中でクラス変数にアクセスするには、

class SchoolReport:

    school_name = '若葉中学'

    def __init__(self, student_name):

        (省略)

    def calc_avg_score(self):

        print(self.school_name)

        (省略)


①インスタンス変数

    ・オブジェクトごとに違う値

    ・オブジェクト名.インスタンス変数名(オブジェクトから)

    ・self.インスタンス変数名(メソッド内)

②クラス変数

    ・オブジェクト同士で共通の値

    ・クラス名.クラス名変数(外から)

    ・self.クラス変数名(メソッド内)

③メソッド内の一時的な変数

    ・selfをつけないし、外からアクセスできない


class SchoolReport:

    school_name = '若葉中学校'. 

    def __init__(self, name, math, jp, en):

        self.student_name = name

        self.math_score = math

        self.jp_score = jp

        self.en_score = en

    def calc_avg_score(self):

        sum_score = (self.math_score + self.jp_score + self.en_score)

        avg_score = sum_score / 3

        return avg_score


sr = SchoolReport('田中 A', 100, 80, 70)

avg = sr.calc_avg_score() 

print(SchoolReport.school_name)

print(avg)

若葉中学校

83.33333333333333






このブログの人気の投稿

電力会社と音質

メディアサーバーの Plex, Emby, Jellyfin を試す

増え続ける iTunes のコンピレーションを減らす(Windows)

Manjaro Linux KDE Plasma に Waydroid をインストール

foobar2000 を UPnP/DLNA Renderer として使う