po-8. クラス,メソッド,オブジェクト生成

141 Views

December 21, 21

スライド概要

トピックス:Python, プログラミング, Python Tutor, クラス,class,def, __init__, オブジェクト, クラス定義, メソッド,self,オブジェクト生成, メソッドアクセス, 属性アクセス

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-8. クラス,メソッ ド,オブジェクト生成 トピックス: クラス,class,コンストラクタ, メソッド,self URL: https://www.kkaneko.jp/pro/po/index.html (Python プログラミングの基本) 金子邦彦 1

2.

全体まとめ クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue クラス定義のプログラム オブジェクト オブジェクト生成のプログラム 半径 3,場所(2, 4) 色 green メソッドアクセスのプログラム 2

3.

全体まとめ • クラスは,同じ種類のオブジェクトの集まりと考 えることができる オブジェクト オブジェクト クラス Ball 半径 1,場所(8, 10) 半径 3,場所(2, 4) 色 green 色 blue • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは self +「.」 3

4.

アウトライン 8-1 8-2 8-3 8-4 項目 復習 クラスとオブジェクト クラス定義,class,オブジェクト生 成 メソッドアクセス,属性アクセス, self 演習 4

5.

オブジェクトとメソッド hero.moveDown() Python プログラム hero オブジェクト moveDown() メソッド 間を「.」で区切っている • メソッド: オブジェクトに属する操作や処理. • メソッド呼び出しでは,引数を指定することがある.引数 (ひきすう)は,メソッドに渡す値のこと Hero.attack("fence", 36, 26) 5

6.

代入 • 代入:プログラムで,「x = 100」のように書く と,x の値が 100 に変化する x = 100 プログラム 実行結果 6

7.

Python プログラムの書き方 Python プログラムの例 x = 100 a = x + 200 enermy1 = hero.findNearestEnemy() hero.attack(enemy1) • 代入:オブジェクト名 + 「=」 + 式または値またはメソッド呼び出し • メソッドアクセス:オブジェクト名 + 「.」 + メソッド名 +「()」 (引数を付けることも) Python プログラムでは,その他にも,属性アクセス,関数 呼び出し,制御,「*」, 「+」などの演算子,コマンド, 定義など 7

8.

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

9.

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

10.

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

11.

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

12.

ステップ実行 • ステップ実行により,プログラム実行の流れをビ ジュアルに観察 12

13.

8-1. クラスとオブジェクト 13

14.

クラスとオブジェクト クラスは,同じ種類のオブジェクトの集まりと考え ることができる 人間 学生 学生でもあり人間でもある 人間だが,学生ではない 14

15.

同じクラスの2つのオブジェクト 半径 1,場所(8, 10) 色 blue 半径 3,場所(2, 4) 色 green 15

16.

クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue • 2つのオブジェクトともに, 同じクラス Ball と考えることができる • オブジェクトは属性を持つ. 半径,場所,色などの属性 オブジェクト 半径 3,場所(2, 4) 色 green 16

17.

8-2. クラス定義,class,オブ ジェクト生成 17

18.

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

19.

クラス定義の例 クラス名: Ball メソッド: __init__ メソッド: printout このクラス定義を使用した,オブジェクトの生成 a 8 10 1 "red" b 2 x 4 y 3 r "green" color Python プログラム 19

20.

メソッドアクセス Python プログラム aやb オブジェクト printout() メソッド 間を「.」で区切っている 20

21.

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

22.

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

23.

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

24.

③「First」をクリックして,プログラム実行を 先頭に戻す 24

25.

④「Step 1 of 23」と表示されているので, 全部で,ステップ数は 23 あることが分かる (ステップ数と,プログラムの行数は違うもの) 25

26.

⑤ 先頭に戻したので ・すべてのオブジェクトは消えている ・赤い矢印は,先頭に戻っている 26

27.

⑥ ステップ実行したいので,「Next」をクリック しながら,矢印の動きを確認しなさい. ※「Next」ボタンを何度か押し,それ以上進めな くなったら終了 あとで使うので,プログラムを消さずに残しておくこと ジャンプしている 実行が進むと, オブジェクトが更新される 27

28.

まとめ • クラス定義では,クラス名の指定と,メソッド定 義を行う. • キーワード class クラス def 定義 __init__ オブジェクト生成のためのメソッド 28

29.

8-3. メソッドアクセス,属性 アクセス,self 29

30.

メソッドと属性 • メソッドや属性は,クラスに属する • メソッド定義内のプログラムは,そのメソッドが 所属するクラスの属性やメソッドへのアクセス権 がある 30

31.

self による属性アクセス,メソッドアクセス • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは self +「.」 • メソッド外では「オブジェクト名」 + 「.」 31

32.

演習 資料:33 ~ 35 【トピックス】 • self によるアクセス 32

33.

class Ball: def __init__(self, x, y, r, color): self.x = x self.y = y self.r = r self.color = color def printout(self): print(self.x, self.y, self.r, self.color) a = Ball(8, 10, 1, "blue") b = Ball(2, 4, 3, "green") a.printout() b.printout() 変更前 class Ball: def __init__(self, x, y, r, color): self.x = x self.y = y self.r = r self.color = color def printout(self): print(self.x, self.y, self.r, self.color) def dist(self): メソッド dist return self.x + self.y の定義 a = Ball(8, 10, 1, "blue") b = Ball(2, 4, 3, "green") a.printout() b.printout() print(a.dist()) メソッドアクセス 変更後 33

34.

① Python Tutor のエディタで次のプログラムを追加 メソッド定義内の属性アクセス メソッド外のメソッドアクセス 34

35.

② 実行し,結果を確認する. あとで使うので,プログラムを消さずに残しておくこと 表示が増える 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 35

36.

8-4. 演習 36

37.

メソッド • 上下左右の移動を考える • オブジェクトの属性 x, y を増減 • そのためのメソッド move を定義 y 左 x が減る 上 y が増える 右 x が増える 下 y が減る x 37

38.

class Ball: def __init__(self, x, y, r, color): self.x = x self.y = y self.r = r self.color = color def printout(self): print(self.x, self.y, self.r, self.color) def dist(self): return self.x + self.y a = Ball(8, 10, 1, "blue") b = Ball(2, 4, 3, "green") a.printout() b.printout() print(a.dist()) 変更前 class Ball: def __init__(self, x, y, r, color): self.x = x self.y = y self.r = r self.color = color def printout(self): print(self.x, self.y, self.r, self.color) def dist(self): return self.x + self.y def move(self, xx, yy): メソッド move self.x = self.x + xx; の定義 self.y = self.y + yy; a = Ball(8, 10, 1, "blue") b = Ball(2, 4, 3, "green") a.move(5, 5) メソッドアクセス b.move(10, 10) a.printout() b.printout() print(a.dist()) 変更後 38

39.

演習 資料:40 ~ 43 【トピックス】 • メソッド定義 • メソッドアクセス 39

40.

① Python Tutor のエディタで次のプログラムを入 れる オブジェクトを移動するメソッド move 40

41.

② 実行し,結果を確認する 表示が変わる 値が変わる 値が変わる 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 41

42.

演習問題 • 右に動かすためのメソッド right を定義 • 左に動かすためのメソッド left を定義 • right を使って,オブジェクト a を右に 5 動かす • Left を使って,オブジェクト b を左に 10 動かす 42

43.

演習問題の解答例 右に移動するメソッド right, 左に移動するメソッド left 43

44.

実行し,結果を確認してみる 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 44

45.

上や下に動かすためのメソッドを、 メソッド left, right を参考に作ってみなさい。 45

46.

全体まとめ クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue クラス定義のプログラム オブジェクト オブジェクト生成のプログラム 半径 3,場所(2, 4) 色 green メソッドアクセスのプログラム 46

47.

全体まとめ • クラスは,同じ種類のオブジェクトの集まりと考 えることができる オブジェクト オブジェクト クラス Ball 半径 1,場所(8, 10) 半径 3,場所(2, 4) 色 green 色 blue • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは self +「.」 47

48.

関連ページ • 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 48

49.

資料中のソースコード 8-2 class Ball: def __init__(self, x, y, r, color): self.x = x self.y = y self.r = r self.color = color def printout(self): print(self.x, self.y, self.r, self.color) a = Ball(8, 10, 1, "blue") b = Ball(2, 4, 3, "green") a.printout() b.printout() 49

50.

資料中のソースコード 8-3 class Ball: def __init__(self, x, y, r, color): self.x = x self.y = y self.r = r self.color = color def printout(self): print(self.x, self.y, self.r, self.color) def dist(self): return self.x + self.y a = Ball(8, 10, 1, "blue") b = Ball(2, 4, 3, "green") a.printout() b.printout() print(a.dist()) 50

51.

資料中のソースコード 8-4 class Ball: def __init__(self, x, y, r, color): self.x = x self.y = y self.r = r self.color = color def printout(self): print(self.x, self.y, self.r, self.color) def dist(self): return self.x + self.y def move(self, xx, yy): self.x = self.x + xx; self.y = self.y + yy; a = Ball(8, 10, 1, "blue") b = Ball(2, 4, 3, "green") a.move(5, 5) b.move(10, 10) a.printout() b.printout() print(a.dist()) 51

52.

資料中のソースコード 8-4 class Ball: def __init__(self, x, y, r, color): self.x = x self.y = y self.r = r self.color = color def printout(self): print(self.x, self.y, self.r, self.color) def dist(self): return self.x + self.y def move(self, xx, yy): self.x = self.x + xx; self.y = self.y + yy; def right(self, xx): self.move(xx, 0) def left(self, xx): self.move(-xx, 0) a = Ball(8, 10, 1, "blue") b = Ball(2, 4, 3, "green") a.move(5, 5) b.move(10, 10) a.right(5) b.left(10) a.printout() b.printout() print(a.dist()) 52