1
po-9. クラス階層,継
承
金子邦彦
トピックス:クラス階層,継承(Python Tutor に
よる演習)
URL: https://www.kkaneko.jp/pro/po/index.html
(Python プログラミングの基本)
全体まとめ
•クラス階層では,複数のクラスが親子関係をなす
•子クラスの定義では,親クラスの指定,親クラスの
__init__ へのアクセスを行う
•親クラスの属性とメソッドは,子クラスに継承される
•子クラスにおいて,同じ名前のメソッドが別定義され
ることもある
2
親クラスの指定
親クラスの __init__ へのアクセス
アウトライン
3
項目
復習
9
-1
クラスとオブジェクト
9
-2
クラス定義,オブジェクト生成
9
-3
演習
4
•2つのオブジェクトともに,
同じクラス Ball
と考えることができる
半径 3,場所(2, 4)
色green
半径 1,場所(8, 10)
色blue
クラス Ball
オブジェクト
オブジェクト
•オブジェクトは属性を持つ.
半径,場所,色などの属性を
考えることができる.
•メソッドは,オブジェクトに
属する操作や処理.
確認や属性の変化のための
メソッドを考えることができる.
クラス定義の例
5
クラス名: Ball
メソッド: __init__, printout
属性: x, y, r, color
※__init__ は,オブジェクト生成のためのメソッド
Python Tutor の起動
①ウェブブラウザを起動する
②Python Tutor を使いたいので,次の URL を開く
http://www.pythontutor.com/
③ 「Python」をクリック ⇒編集画面が開く
6
Python Tutor でのプログラム実行手順
7
(1)「Visualize Execution」をク
リックして実行画面に切り替える (2)「Last」をクリック.
(3) 実行結果を確認する.(4)「Edit this code」をク
リックして編集画面に戻る
Python Tutor 使用上の注意点①
•実行画面で,次のような赤の表示が出ることがある →
無視してよい
過去の文法ミスに関する確認表示
邪魔なときは「Close」
8
Python Tutor 使用上の注意点②
「please wait ... executing」のとき,10秒ほど待つ.
→混雑しているときは, 「Server Busy・・・」
というメッセージが出ることがある.
混雑している.少し(数秒から数十秒)待つと自
動で表示が変わる(変わらない場合には,操作を
もう一度行ってみる) 9
9-1. クラス階層
10
クラス階層
クラス階層では,複数のクラスが親子関係をなす
11
クラスA
クラスB
親
子
クラスD
親
子
クラスC
親
子
12
半径 3,場所(2, 4)
色green
半径 1,場所(8, 10)
色blue
クラス Ball
オブジェクト
オブジェクト
場所(1, 2)
色red
クラス Point
オブジェクト
Point クラス定義の例
13
クラス名: Point
メソッド: __init__, printout
属性: x, y, color
※__init__ は,オブジェクト生成のためのメソッド
演習
資料:15 ~16
【トピックス】
•クラス定義
•オブジェクト生成
•メソッドアクセス
14
①Python Tutor のエディタで次のプログラムを入
れる
15
クラス定義
オブジェクト生成
クラス定義,オブジェクト生成,メソッドアクセス
字下げも正確に
メソッドアクセス
16
オブジェクト c
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
② 実行し,結果を確認する メソッド printout
による表示
Ball クラス定義の例
(クラス階層を考えない場合)
17
クラス名: Ball
メソッド: __init__, printout
属性: x, y, r, color
※__init__ は,オブジェクト生成のためのメソッド
Point Ball
属性 属性
x x
y y
color color
r
メソッド メソッド
printout printout
類似した 2つのクラス
18
printout は名前は
同じだが,中身が違う
r の有り無しが
違う
x, y, color は同じ
Point クラスと Ball クラスの定義の例
(クラス階層を考えない場合)
Point Ball
19
x, y, color は同じ
同じようなプログラムを繰り返し書きたいですか?
→No. クラス階層により解決
Point クラスと Ball クラスの定義の例
(クラス階層を考える場合)
Point Ball
20
x, y, color について
繰り返し書くことはなくなる
Point Ball
21
class Ball(Point)
Ball クラスは Point クラスの子である
super(Ball, self).__init__(x, y, color)
親クラスである Point クラスの
メソッド __init__ にアクセス.
その引数は x, y, color
クラス階層を考える場合と考えない場合の違い
22
Point
Ball
Point
Ball
働きは
同じ
クラス階層を考えない クラス階層を考える
演習
資料:24 ~25
【トピックス】
•サブクラスのクラス定義
23
①Python Tutor のエディタで次のプログラムを入れる
24
Ball クラスのクラス定義,オブジェクト生成,
メソッドアクセスを追加
追加
追加
25
オブジェクト a,
b, c
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
② 実行し,結果を確認する メソッド printout
による表示
まとめ
•クラス階層では,複数のクラスが親子関係をなす
•子クラスの定義では,親クラスの指定,親クラス
の__init__ へのアクセスを行う
26
親クラスの指定
親クラスの __init__ へのアクセス
9-2. 継承
27
継承とは,親クラスの属性とメソッドを子クラスが受
け継ぐこと
28
継承
•親クラスの属性とメソッドは,子クラスに継承
される
•子クラスにおいて,同じ名前のメソッドが別定
義されることもある
29
Point Ball
親子
・属性 r を追加
・メソッド printout は別定義
30
属性 r を追加
メソッド printout は別定義
演習
資料:32 ~36
【トピックス】
•継承
31
①Python Tutor のエディタで次のプログラムを入れる
32
Point クラスに,属性 x とy を0 にするメソッド reset を追加
追加
追加
33
オブジェクト a, b, c
オブジェクト a, b の属
性x, y の値が 0 に
なっている
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
② 実行し,結果を確認する
メソッド printout
による表示
Point クラスのメソッド reset がBall クラスに継承されていることを確認
Python では,次のプログラムにより,オブジェク
トaのメソッド名,属性名などを表示できる
34
print(dir(a))
③Python Tutor のエディタで,
プログラムの末尾に「print(dir(a))」を追加する
35
追加
36
「Visual Execution」をクリック.そして「Last」をクリック.結果を確認.
「Edit this code」をクリックすると,エディタの画面に戻る
④ 実行し,結果を確認する
枠を広げる
横スクロースする
__class__ など「__」で始まるもの: システムが自動で追加したメソッド,属性
color, printout, r, reset, x, y: プログラムで書いたメソッド,属性
Ball クラスには,Point クラスの属性,メソッドが
継承されている
全体まとめ
•クラス階層では,複数のクラスが親子関係をなす
•子クラスの定義では,親クラスの指定,親クラスの
__init__ へのアクセスを行う
•親クラスの属性とメソッドは,子クラスに継承される
•子クラスにおいて,同じ名前のメソッドが別定義され
ることもある
37
親クラスの指定
親クラスの __init__ へのアクセス
Python 関連ページ
•Python まとめページ
https://www.kkaneko.jp/tools/man/python.html
•Python 入門(スライド資料とプログラム例)
https://www.kkaneko.jp/pro/pf/index.html
•Python プログラミングの基本(スライド資料とプログラム例)
https://www.kkaneko.jp/pro/po/index.html
•Python プログラム例
https://www.kkaneko.jp/pro/python/index.html
•人工知能の実行(Google Colaboratory を使用)
https://www.kkaneko.jp/ai/ni/index.html
•人工知能の実行(Python を使用)(Windows 上)
https://www.kkaneko.jp/ai/deepim/index.html 38