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
金子邦彦(かねこくにひこ) 福山大学・工学部・教授 ホームページ: https://www.kkaneko.jp/index.html 金子邦彦 YouTube チャンネル: https://youtube.com/user/kunihikokaneko
po-8. クラス,メソッ ド,オブジェクト生成 トピックス: クラス,class,コンストラクタ, メソッド,self URL: https://www.kkaneko.jp/pro/po/index.html (Python プログラミングの基本) 金子邦彦 1
全体まとめ クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue クラス定義のプログラム オブジェクト オブジェクト生成のプログラム 半径 3,場所(2, 4) 色 green メソッドアクセスのプログラム 2
全体まとめ • クラスは,同じ種類のオブジェクトの集まりと考 えることができる オブジェクト オブジェクト クラス Ball 半径 1,場所(8, 10) 半径 3,場所(2, 4) 色 green 色 blue • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは self +「.」 3
アウトライン 8-1 8-2 8-3 8-4 項目 復習 クラスとオブジェクト クラス定義,class,オブジェクト生 成 メソッドアクセス,属性アクセス, self 演習 4
オブジェクトとメソッド hero.moveDown() Python プログラム hero オブジェクト moveDown() メソッド 間を「.」で区切っている • メソッド: オブジェクトに属する操作や処理. • メソッド呼び出しでは,引数を指定することがある.引数 (ひきすう)は,メソッドに渡す値のこと Hero.attack("fence", 36, 26) 5
代入 • 代入:プログラムで,「x = 100」のように書く と,x の値が 100 に変化する x = 100 プログラム 実行結果 6
Python プログラムの書き方 Python プログラムの例 x = 100 a = x + 200 enermy1 = hero.findNearestEnemy() hero.attack(enemy1) • 代入:オブジェクト名 + 「=」 + 式または値またはメソッド呼び出し • メソッドアクセス:オブジェクト名 + 「.」 + メソッド名 +「()」 (引数を付けることも) Python プログラムでは,その他にも,属性アクセス,関数 呼び出し,制御,「*」, 「+」などの演算子,コマンド, 定義など 7
Python Tutor の起動 ① ウェブブラウザを起動する ② Python Tutor を使いたいので,次の URL を開く http://www.pythontutor.com/ ③ 「Python」をクリック ⇒ 編集画面が開く 8
Python Tutor でのプログラム実行手順 (1)「Visualize Execution」をク リックして実行画面に切り替える (2)「Last」をクリック. (4)「Edit this code」をク (3) 実行結果を確認する. 9 リックして編集画面に戻る
Python Tutor 使用上の注意点① • 実行画面で,次のような赤の表示が出ることがある → 無視してよい 過去の文法ミスに関する確認表示 邪魔なときは「Close」 10
Python Tutor 使用上の注意点② 「please wait ... executing」のとき,10秒ほど待つ. → 混雑しているときは, 「Server Busy・・・」 というメッセージが出ることがある. 混雑している.少し(数秒から数十秒)待つと自 動で表示が変わる(変わらない場合には,操作を もう一度行ってみる) 11
ステップ実行 • ステップ実行により,プログラム実行の流れをビ ジュアルに観察 12
8-1. クラスとオブジェクト 13
クラスとオブジェクト クラスは,同じ種類のオブジェクトの集まりと考え ることができる 人間 学生 学生でもあり人間でもある 人間だが,学生ではない 14
同じクラスの2つのオブジェクト 半径 1,場所(8, 10) 色 blue 半径 3,場所(2, 4) 色 green 15
クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue • 2つのオブジェクトともに, 同じクラス Ball と考えることができる • オブジェクトは属性を持つ. 半径,場所,色などの属性 オブジェクト 半径 3,場所(2, 4) 色 green 16
8-2. クラス定義,class,オブ ジェクト生成 17
クラス定義の例 クラス名: Ball メソッド: __init__, printout 属性: x, y, r, color ※ __init__ は,オブジェクト生成のためのメソッド 18
クラス定義の例 クラス名: Ball メソッド: __init__ メソッド: printout このクラス定義を使用した,オブジェクトの生成 a 8 10 1 "red" b 2 x 4 y 3 r "green" color Python プログラム 19
メソッドアクセス Python プログラム aやb オブジェクト printout() メソッド 間を「.」で区切っている 20
演習 資料:22 ~ 27 【トピックス】 • クラス定義 • class • オブジェクト生成 • メソッドアクセス 21
① Python Tutor のエディタで次のプログラムを入 れる クラス定義,オブジェクト生成,メソッドアクセス クラス定義 オブジェクト生成 メソッドアクセス 字下げも正確に 22
② 実行し,結果を確認する メソッド printout による表示 オブジェクト a, b 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 23
③「First」をクリックして,プログラム実行を 先頭に戻す 24
④「Step 1 of 23」と表示されているので, 全部で,ステップ数は 23 あることが分かる (ステップ数と,プログラムの行数は違うもの) 25
⑤ 先頭に戻したので ・すべてのオブジェクトは消えている ・赤い矢印は,先頭に戻っている 26
⑥ ステップ実行したいので,「Next」をクリック しながら,矢印の動きを確認しなさい. ※「Next」ボタンを何度か押し,それ以上進めな くなったら終了 あとで使うので,プログラムを消さずに残しておくこと ジャンプしている 実行が進むと, オブジェクトが更新される 27
まとめ • クラス定義では,クラス名の指定と,メソッド定 義を行う. • キーワード class クラス def 定義 __init__ オブジェクト生成のためのメソッド 28
8-3. メソッドアクセス,属性 アクセス,self 29
メソッドと属性 • メソッドや属性は,クラスに属する • メソッド定義内のプログラムは,そのメソッドが 所属するクラスの属性やメソッドへのアクセス権 がある 30
self による属性アクセス,メソッドアクセス • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは self +「.」 • メソッド外では「オブジェクト名」 + 「.」 31
演習 資料:33 ~ 35 【トピックス】 • self によるアクセス 32
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
① Python Tutor のエディタで次のプログラムを追加 メソッド定義内の属性アクセス メソッド外のメソッドアクセス 34
② 実行し,結果を確認する. あとで使うので,プログラムを消さずに残しておくこと 表示が増える 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 35
8-4. 演習 36
メソッド • 上下左右の移動を考える • オブジェクトの属性 x, y を増減 • そのためのメソッド move を定義 y 左 x が減る 上 y が増える 右 x が増える 下 y が減る x 37
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
演習 資料:40 ~ 43 【トピックス】 • メソッド定義 • メソッドアクセス 39
① Python Tutor のエディタで次のプログラムを入 れる オブジェクトを移動するメソッド move 40
② 実行し,結果を確認する 表示が変わる 値が変わる 値が変わる 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 41
演習問題 • 右に動かすためのメソッド right を定義 • 左に動かすためのメソッド left を定義 • right を使って,オブジェクト a を右に 5 動かす • Left を使って,オブジェクト b を左に 10 動かす 42
演習問題の解答例 右に移動するメソッド right, 左に移動するメソッド left 43
実行し,結果を確認してみる 「Visual Execution」をクリック.そして「Last」をクリック.結果を確認. 「Edit this code」をクリックすると,エディタの画面に戻る 44
上や下に動かすためのメソッドを、 メソッド left, right を参考に作ってみなさい。 45
全体まとめ クラス Ball オブジェクト 半径 1,場所(8, 10) 色 blue クラス定義のプログラム オブジェクト オブジェクト生成のプログラム 半径 3,場所(2, 4) 色 green メソッドアクセスのプログラム 46
全体まとめ • クラスは,同じ種類のオブジェクトの集まりと考 えることができる オブジェクト オブジェクト クラス Ball 半径 1,場所(8, 10) 半径 3,場所(2, 4) 色 green 色 blue • メソッド定義内で,そのメソッドが所属するクラ スで定義された属性やメソッドにアクセスすると きは self +「.」 47
関連ページ • 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
資料中のソースコード 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
資料中のソースコード 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
資料中のソースコード 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
資料中のソースコード 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