po-9. クラス階層，継承
トピックス：クラス階層，継承（Python Tutor による演習）
URL: https://www.kkaneko.jp/pro/po/index.html（Python プログラミングの基本）

金子邦彦
1

全体まとめ• クラス階層では，複数のクラスが親子関係をなす• 子クラスの定義では，親クラスの指定，親クラスの__init__ へのアクセスを行う
親クラスの指定

親クラスの __init__ へのアクセス• 親クラスの属性とメソッドは，子クラスに継承される• 子クラスにおいて，同じ名前のメソッドが別定義されることもある2

アウトライン

9-1
9-2
9-3

項目
復習
クラスとオブジェクト
クラス定義，オブジェクト生成演習

3

クラス Ball
オブジェクト

半径 1，場所（8, 10）
色 blueオブジェクト

半径 3，場所（2, 4）
色 green• ２つのオブジェクトともに，同じクラス Ballと考えることができる• オブジェクトは属性を持つ．
半径，場所，色などの属性を考えることができる．

• メソッドは，オブジェクトに属する操作や処理．
確認や属性の変化のためのメソッドを考えることができる．

4

クラス定義の例

クラス名: Ball
メソッド: __init__, printout
属性: x, y, r, color※ __init__ は，オブジェクト生成のためのメソッド
5Python Tutor の起動① ウェブブラウザを起動する② Python Tutor を使いたいので，次の URL を開く

http://www.pythontutor.com/③ 「Python」をクリック ⇒ 編集画面が開く

6

Python Tutor でのプログラム実行手順(1)「Visualize Execution」をクリックして実行画面に切り替える(2)「Last」をクリック．

(4)「Edit this code」をク(3) 実行結果を確認する．
7
リックして編集画面に戻る

Python Tutor 使用上の注意点①• 実行画面で，次のような赤の表示が出ることがある →無視してよい
過去の文法ミスに関する確認表示
邪魔なときは「Close」

8Python Tutor 使用上の注意点②「please wait ... executing」のとき，１０秒ほど待つ．

混雑しているときは， 「Server Busy・・・」→というメッセージが出ることがある．

混雑している．少し（数秒から数十秒）待つと自動で表示が変わる（変わらない場合には，操作をもう一度行ってみる）

9

9-1. クラス階層

10

クラス階層
クラス階層では，複数のクラスが親子関係をなす
クラスA
親子

クラスB

親子

クラスC

親子

クラスD

11

クラス Point

クラス Ball

オブジェクトオブジェクト場所（1, 2）色 red

半径 1，場所（8, 10）
色 blueオブジェクト

半径 3，場所（2, 4）
色 green

12

Point クラス定義の例

クラス名: Point
メソッド: __init__, printout
属性: x, y, color※ __init__ は，オブジェクト生成のためのメソッド
13

演習

資料：15 ～ 16
【トピックス】• クラス定義• オブジェクト生成• メソッドアクセス

14

① Python Tutor のエディタで次のプログラムを入れる
クラス定義，オブジェクト生成，メソッドアクセス

クラス定義

オブジェクト生成
メソッドアクセス

字下げも正確に15

② 実行し，結果を確認する

メソッド printout
による表示

オブジェクト c「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

16

Ball クラス定義の例（クラス階層を考えない場合）

クラス名: Ball
メソッド: __init__, printout
属性: x, y, r, color※ __init__ は，オブジェクト生成のためのメソッド
17類似した 2つのクラス
Point属性

Ball属性

xxyy

color

x, y, color は同じ

color

メソッド

r の有り無しが違うr
メソッド

printout

printout

printout は名前は同じだが，中身が違う

18

Point クラスと Ball クラスの定義の例（クラス階層を考えない場合）PointBallx, y, color は同じ同じようなプログラムを繰り返し書きたいですか？
→ No. クラス階層により解決
19

Point クラスと Ball クラスの定義の例（クラス階層を考える場合）
Point

Ball

x, y, color について繰り返し書くことはなくなる20

class Ball(Point)
Ball クラスは Point クラスの子である

Point

Ball

super(Ball, self).__init__(x, y, color)
親クラスである Point クラスのメソッド __init__ にアクセス．
その引数は x, y, color

21

クラス階層を考える場合と考えない場合の違い
Point

Point

働きは同じ
Ball

Ball

クラス階層を考えないクラス階層を考える

22

演習

資料：24 ～ 25

【トピックス】• サブクラスのクラス定義

23

① Python Tutor のエディタで次のプログラムを入れる
Ball クラスのクラス定義，オブジェクト生成，メソッドアクセスを追加

追加

追加

24

② 実行し，結果を確認する

メソッド printoutによる表示

オブジェクト a,b, c「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

25

まとめ• クラス階層では，複数のクラスが親子関係をなす• 子クラスの定義では，親クラスの指定，親クラスの __init__ へのアクセスを行う
親クラスの指定

親クラスの __init__ へのアクセス26

9-2. 継承27

継承とは，親クラスの属性とメソッドを子クラスが受け継ぐこと28

継承• 親クラスの属性とメソッドは，子クラスに継承される• 子クラスにおいて，同じ名前のメソッドが別定義されることもある
親Point子Ball・属性 r を追加
・メソッド printout は別定義

29

属性 r を追加

メソッド printout は別定義

30

演習

資料：32 ～ 36

【トピックス】• 継承31

① Python Tutor のエディタで次のプログラムを入れる
Point クラスに，属性 x と y を 0 にするメソッド reset を追加

追加

追加

32

② 実行し，結果を確認する
Point クラスのメソッド reset が Ball クラスに継承されていることを確認

メソッド printout
による表示

オブジェクト a, b, c
オブジェクト a, b の属
性 x, y の値が 0 になっている「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

33

Python では，次のプログラムにより，オブジェク
ト a のメソッド名，属性名などを表示できるprint(dir(a))

34③ Python Tutor のエディタで，プログラムの末尾に「print(dir(a))」を追加する

追加

35

④ 実行し，結果を確認する

Ball クラスには，Point クラスの属性，メソッドが継承されている__class__ など「__」で始まるもの： システムが自動で追加したメソッド，属性
color, printout, r, reset, x, y: プログラムで書いたメソッド，属性横スクロースする
枠を広げる「Visual Execution」をクリック．そして「Last」をクリック．結果を確認．
「Edit this code」をクリックすると，エディタの画面に戻る

36

全体まとめ• クラス階層では，複数のクラスが親子関係をなす• 子クラスの定義では，親クラスの指定，親クラスの__init__ へのアクセスを行う
親クラスの指定

親クラスの __init__ へのアクセス• 親クラスの属性とメソッドは，子クラスに継承される• 子クラスにおいて，同じ名前のメソッドが別定義されることもある

37

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