po-9. クラス階層,継承

125 Views

December 21, 21

スライド概要

トピックス:Python, プログラミング, Python Tutor, クラス定義, メソッド, クラス階層,継承, super, dir

Python プログラミングの基本
https://www.kkaneko.jp/pro/po/index.html

金子邦彦研究室ホームページ
https://www.kkaneko.jp/index.html

profile-image

金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

po-9. クラス階層,継 承 トピックス:クラス階層,継承(Python Tutor に よる演習) URL: https://www.kkaneko.jp/pro/po/index.html (Python プログラミングの基本) 金子邦彦 1

2.

全体まとめ • クラス階層では,複数のクラスが親子関係をなす • 子クラスの定義では,親クラスの指定,親クラスの __init__ へのアクセスを行う 親クラスの指定 親クラスの __init__ へのアクセス • 親クラスの属性とメソッドは,子クラスに継承される • 子クラスにおいて,同じ名前のメソッドが別定義され ることもある 2

3.

アウトライン 9-1 9-2 9-3 項目 復習 クラスとオブジェクト クラス定義,オブジェクト生成 演習 3

4.

クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue オブジェクト 半径 3,場所(2, 4) 色 green • 2つのオブジェクトともに, 同じクラス Ball と考えることができる • オブジェクトは属性を持つ. 半径,場所,色などの属性を 考えることができる. • メソッドは,オブジェクトに 属する操作や処理. 確認や属性の変化のための メソッドを考えることができる. 4

5.

クラス定義の例 クラス名: Ball メソッド: __init__, printout 属性: x, y, r, color ※ __init__ は,オブジェクト生成のためのメソッド 5

6.

Python Tutor の起動 ① ウェブブラウザを起動する ② Python Tutor を使いたいので,次の URL を開く http://www.pythontutor.com/ ③ 「Python」をクリック ⇒ 編集画面が開く 6

7.

Python Tutor でのプログラム実行手順 (1)「Visualize Execution」をク リックして実行画面に切り替える (2)「Last」をクリック. (4)「Edit this code」をク (3) 実行結果を確認する. 7 リックして編集画面に戻る

8.

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

9.

Python Tutor 使用上の注意点② 「please wait ... executing」のとき,10秒ほど待つ. → 混雑しているときは, 「Server Busy・・・」 というメッセージが出ることがある. 混雑している.少し(数秒から数十秒)待つと自 動で表示が変わる(変わらない場合には,操作を もう一度行ってみる) 9

10.

9-1. クラス階層 10

11.

クラス階層 クラス階層では,複数のクラスが親子関係をなす クラスA 親 子 クラスB 親 子 クラスC 親 子 クラスD 11

12.

クラス Point クラス Ball オブジェクト オブジェクト 場所(1, 2) 色 red 半径 1,場所(8, 10) 色 blue オブジェクト 半径 3,場所(2, 4) 色 green 12

13.

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

14.

演習 資料:15 ~ 16 【トピックス】 • クラス定義 • オブジェクト生成 • メソッドアクセス 14

15.

① Python Tutor のエディタで次のプログラムを入 れる クラス定義,オブジェクト生成,メソッドアクセス クラス定義 オブジェクト生成 メソッドアクセス 字下げも正確に 15

16.

② 実行し,結果を確認する メソッド printout による表示 オブジェクト c 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 16

17.

Ball クラス定義の例 (クラス階層を考えない場合) クラス名: Ball メソッド: __init__, printout 属性: x, y, r, color ※ __init__ は,オブジェクト生成のためのメソッド 17

18.

類似した 2つのクラス Point 属性 Ball 属性 x x y y color メソッド printout x, y, color は同じ r の有り無しが 違う color r メソッド printout printout は名前は 同じだが,中身が違う 18

19.

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

20.

Point クラスと Ball クラスの定義の例 (クラス階層を考える場合) Point Ball x, y, color について 繰り返し書くことはなくなる 20

21.

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

22.

クラス階層を考える場合と考えない場合の違い Point Point 働きは 同じ Ball クラス階層を考えない Ball クラス階層を考える 22

23.

演習 資料:24 ~ 25 【トピックス】 • サブクラスのクラス定義 23

24.

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

25.

② 実行し,結果を確認する メソッド printout による表示 オブジェクト a, b, c 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 25

26.

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

27.

9-2. 継承 27

28.

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

29.

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

30.

属性 r を追加 メソッド printout は別定義 30

31.

演習 資料:32 ~ 36 【トピックス】 • 継承 31

32.

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

33.

② 実行し,結果を確認する Point クラスのメソッド reset が Ball クラスに継承されていることを確認 メソッド printout による表示 オブジェクト a, b, c オブジェクト a, b の属 性 x, y の値が 0 に なっている 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 33

34.

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

35.

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

36.

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

37.

全体まとめ • クラス階層では,複数のクラスが親子関係をなす • 子クラスの定義では,親クラスの指定,親クラスの __init__ へのアクセスを行う 親クラスの指定 親クラスの __init__ へのアクセス • 親クラスの属性とメソッドは,子クラスに継承される • 子クラスにおいて,同じ名前のメソッドが別定義され ることもある 37

38.

関連ページ • Python まとめページ https://www.kkaneko.jp/tools/man/python.html • Python プログラミングを学ぶ Python Tutor, VisuAlgo, Code Combat を使用 https://www.kkaneko.jp/cc/po/index.html • Python プログラム例 https://www.kkaneko.jp/pro/python/index.html • 人工知能の実行(Google Colaboratory を使用) https://www.kkaneko.jp/pro/ni/index.html • 人工知能の実行(Python を使用)(Windows 上) https://www.kkaneko.jp/pro/deepim/index.html 38