po-7. クラス階層,継承
スライド概要
Python プログラミング演習
URL: https://www.kkaneko.jp/cc/po/index.html
作者について:
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
スライド一覧各ページのテキスト
1. po-7. クラス階層,継承 プログラミングの基礎を Python で学びたい人へ(全9回) URL: https://www.kkaneko.jp/cc/po/index.html 金子邦彦 1
2. 7-1 復習 7-2 クラス階層 7-3 継承 アウトライン • クラス階層を理解し,親クラス, 子クラスを Python で扱えるよう になる. • 継承について理解する. 2
3. 7-1.復習 3
4. Python のオブジェクトの生成 • 次の2つのオブジェクトを生成する Python プロ グラム a 1 2 "red" b 2 x 4 y "green" color • クラス Ball のオブジェクト生成を行うプログラム 4
5. Python のメソッド 次のメソッドを考える. • Ball クラスに属するメソッド move • このメソッドは,オブジェクトの属性 x, y を増減させ るためのもの y 左 x が減る 上 y が増える 右 x が増える 下 y が減る x 5
6. クラス定義 クラス定義の中には,コンストラクタの定義,その 他メソッドの定義を含める. オブジェクトの生成を行うメソッドのことを コンストラクタという 6
7. • 資料:8~14 • 次のことを理解しマスターする 演習の指示 • クラス定義 • コンストラクタによるオブジェ クト生成 • メソッド定義 • 「オブジェクト名」+「.」で属 性やメソッドにアクセス 7
8. 演習 ① ウェブブラウザを起動する ② Python Tutor を使いたいので,次の URL を開く http://www.pythontutor.com/ 8
9. ③ 「Python Tutor」をクリック 9
10. 「Python 3.6」になっている エディタ 実行のためのボタン 10
11. Python Tutor でのプログラム実行手順 (1)「Visualize Execution」 をクリック. (3) 結果を確認する. (2)「Last」をクリック. (4)「Edit this code」 11 をクリックして戻る
12. ④ 次のプログラムを実行し,結果を確認しなさい 12
13. 13
14. 14
15. 使用上の注意点1 • 次のような表示が出ることがある → 無視してよい 過去の文法ミスに関する確認表示 邪魔なときは「Close」 15
16. 使用上の注意点2 「please wait ... executing」のとき、10秒ほど待つ. → 混雑しているときは、 「Server Busy・・・」 というメッセージが出ることがある. 混雑している.少し(数秒から数十秒)待つと自 動で表示が変わる(変わらない場合には,操作を もう一度行ってみる) 16
17. • 資料:18~21 • 次のことを理解しマスターする 演習の指示 • オブジェクトが生成されるタイ ミング • いま使用したプログラムは,次 で使うので,消さずに残してお くこと 17
18. ステップ実行により、プログラム実行の流れをビ ジュアルに観察 ①「First」をクリックして,最初に戻しなさい 18
19. ②「Step 1 of 21」と表示されているので, 全部で,ステップ数は 21 あることが分かる 19
20. ③ 最初に戻したので ・すべてのオブジェクトは消えている ・赤い矢印は,main メソッドの先頭コマンド のところに戻っている 20
21. ④ ステップ実行したいので,「Next」をクリック しながら,矢印の動きを確認しなさい. ※「Next」ボタンを何度か押し,それ以上進めな くなったら終了 ジャンプする 実行が進むと, オブジェクトが更新される 21
22. 7-2.クラス階層 22
23. 問いかけ • オブジェクト指向の利点は何で しょうか? 23
24. クラス階層とは クラス階層とは,複数のクラスが親子 関係をなすこと まとめページ クラスA 親 子 クラスB 親 子 クラスC 親 子 クラスD 24
25. 継承 • 継承とは,親クラスの属性とメソッドを子クラスが 受け継ぐこと • 親クラスのことを「スーパークラス」,子クラスの ことを「サブクラス」ともいう 25
26. Python のオブジェクトの生成 • 次の3つのオブジェクトを生成 a 1 2 "red" b 3 4 "green" x 6 y "blue" color 5 x 1 r • オブジェクト生成を行うプログラム 26
27. クラスの類似性 • 類似した2つのクラス Ball 属性 Circle 属性 x x y y color メソッド x, y, color は同じ r の有り無しが 違う color r move move reset reset メソッドの名前も 中身も全く同じとする 27
28. 2つのクラスのプログラム (親子関係にしない場合) Ball Circle 追加 全く同じ 28
29. 問いかけ 同じようなプログラムを繰り返し書きたいですか? -> No. クラス階層により解決 Ball Circle 追加 全く同じ 29
30. クラスの親子関係 • クラス①が親,クラス②が子であるとき • クラス②は,クラス①の属性とメソッドをすべて持つ • クラス②で,クラス①にない属性やメソッドが追加さ れることがある クラス① クラスBall 親 親 子 子 クラス② クラスCircle 属性 r を追加 30
31. クラスの親子関係 クラス名 Ball 属性 x, y, color メソッド move, reset クラス名 Circle 属性 x, y, color, r メソッド move, reset クラス Circle は,親クラスで あるクラス Ball の属性とメ ソッドを継承する. 31
32. 2つのクラスのプログラム 親子関係にしない場合とする場合の比較 Ball Ball 働きは 同じ Circle 親子関係にしない (同じようなプログラムを繰り返す) Circle 親子関係にする 32
33. Python でのクラスの親子関係の書き方 親子関係の指定「class Circle(Ball):」 子クラスである Circle で追加される 属性,メソッドを書く コンストラクタの定義. super(Circle, self).__init__ により,親クラスの コンストラクタを呼び出していることに注意 33
34. Python でのクラスの親子関係の書き方 親クラスのコンストラクタを 呼び出して,属性値を設定 子クラスで追加した属性を設定 34
35. 問いかけ • オブジェクト指向の利点は何で しょうか? クラス階層により,プログラムが書 きやすい (金子見解) 35
36. 7-3.継承 36
37. • 資料:38~40 演習の指示 • 次のことを理解しマスターする • 親子関係にある2つのクラス定 義 • クラス定義での親クラスの指定 • 親クラスのコンストラクタの呼 び出し • 継承 37
38. ④次のようにプログラムを書き換えなさい プログラムは,次ページに続いている Ball クラス定義の部分 38
39. Circle クラス定義と, コンストラクタによるオブジェクト生成 結果は次ページに記載 39
40. 40
41. 全体まとめ • クラス階層とは,複数のクラスが親子関係をなす こと • クラス①が親,クラス②が子であるとき • クラス②は,クラス①の属性とメソッドをすべて持つ • クラス②で,クラス①にない属性やメソッドが追加さ れることがある • 親子関係の指定は,「class Circle(Ball):」のよう に書く.Circle が子,Ball が親. • 継承とは,親クラスの属性とメソッドを子クラス が受け継ぐこと • 親クラスのことを「スーパークラス」,子クラス のことを「サブクラス」ともいう 41
42. 関連資料 • Python まとめページ https://www.kkaneko.jp/cc/python/googlecolab.html • Python の基本 Google Colaboratory,Paiza.IO を使用. https://www.kkaneko.jp/cc/colab/index.html • Python 入門(全6回) Google Colaboratoryを使用. https://www.kkaneko.jp/cc/pf/index.html • Python プログラミング演習(全9回) Python Tutor, VisuAlgo を使用 https://www.kkaneko.jp/cc/po/index.html • さまざまな Windows アプリケーションのインストールと設定 https://www.kkaneko.jp/cc/tools/index.html 42