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):
(省略)
①インスタンス変数
・オブジェクトごとに違う値
・オブジェクト名.インスタンス変数名(オブジェクトから)
・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