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