LESSON 26 ・ クラス
メソッドと初期化
メソッドを定義する
class Student:
name = ""
score = 0
def show(self):
print(f"{self.name}: {self.score}点")
student = Student()
student.name = "Mary"
student.score = 65
student.show()
クラスにはデータ属性だけでなく、クラス専用の関数であるメソッド(method)を定義することもできます。インスタンスメソッドの第1パラメータにはselfを使い、自分自身を表します。
ここでは、Mary: 65点のような形式で名前と点数を出力するメソッドshowを実装しています。
student.show()とすると、showの第1パラメータselfにstudentに格納されているStudentオブジェクトが自動的に渡されます。
作成と同時に初期化する
class Student:
name = ""
score = 0
def __init__(self, name, score):
self.name = name
self.score = score
def show(self):
print(f"{self.name}: {self.score}点")
student = Student("Mary", 65)
student.show()
__init__は特別なメソッドで、Student( )でStudentオブジェクトを作成するときに呼ばれます。__init__にパラメータを定義すると、Student("Mary", 65)のように引数を渡し、オブジェクト作成と同時に指定された値でデータ属性を初期化できます。
そうすれば、後からstudent.name = "Mary"のようにして値をセットしなくても、Student("Mary", 65)のようにして初期化できます。
__init__メソッドのことをイニシャライザ(initializer)とも言います。
PRACTICE
演習問題
コードを自分で書いて実行してから、答えと解説を確認しましょう。
問題1
名前と点数を持つStudentクラスに、名前: 点数点の形で表示するshowメソッドを定義してください。名前が"Mary"、点数が65のオブジェクトでshowを呼び出してください。
答えと解説を見る
模範解答
class Student:
name = ""
score = 0
def show(self):
print(f"{self.name}: {self.score}点")
student = Student()
student.name = "Mary"
student.score = 65
student.show()
メソッドの中では、selfを使って、そのメソッドを呼び出したオブジェクト自身の値へアクセスします。
問題2
題名とページ数を作成時に受け取るBookクラスを定義してください。また、題名: ページ数ページの形で表示するshowメソッドも定義し、"Python Guide"、240で作ったオブジェクトから呼び出してください。
答えと解説を見る
模範解答
class Book:
title = ""
pages = 0
def __init__(self, title, pages):
self.title = title
self.pages = pages
def show(self):
print(f"{self.title}: {self.pages}ページ")
book = Book("Python Guide", 240)
book.show()
__init__で作成時の引数を受け取り、それぞれの値を初期化しています。
問題3
幅と高さを作成時に受け取るRectangleクラスを定義してください。面積を返すareaメソッドを作り、幅8・高さ5の長方形の面積を表示してください。
答えと解説を見る
模範解答
class Rectangle:
width = 0
height = 0
def __init__(self, width, height):
self.width = width
self.height = height
def area(self):
return self.width * self.height
rectangle = Rectangle(8, 5)
print(rectangle.area())
初期化した幅と高さをareaメソッドで掛け、結果を戻り値にします。rectangle.area()は40を返します。