pf-11. クラス階層,継承
(Python 入門)
URL: https://www.kkaneko.jp/pro/pf/index.html
1
金子邦彦
オブジェクトとメソッド
•オブジェクト:コンピュータでの操作や処理の対象と
なるもの
•メソッド:オブジェクトに属する機能や操作.オブジェ
クトがもつ能力に相当する
•引数:メソッドが行う操作の詳細に関する情報,メ
ソッド呼び出しのときに、引数を指定できる
hero.attack("fence", 36, 26)
2
hero.moveDown() hero オブジェクト
moveDown() メソッド
間を「.」で区切っている
クラスとオブジェクト
クラスは,同じ種類のオブジェクトの集まりと考え
ることができる
3
人間
学生
学生でもあり人間でもある 人間だが,学生ではない
クラス定義の例
4
クラス名: Point
属性: x, y, color
メソッド: __init__, printout
オブジェクト生成の際に,メソッド __init__ が自動で実行
される
trinket
•Trinket はオンラインのPython、HTML 等の学習サイト
•有料の機能と無料の機能がある
•自分が作成した Python プログラムを公開し、他の人に実
行してもらうことが可能(そのとき、書き替えて実行も可
能)
•Python の標準機能を登載、その他、次のモジュールや
パッケージがインストール済み
math, matplotlib.pyplot, numpy, operator, processing, pygal,
random, re, string, time, turtle, urllib.request
5
•trinket はPython, HTML などのプログラムを書き実行できる
サイト
•https://trinket.strivemath.org/python/0fd59392c8
のように、違うプログラムには違う URL が割り当てられる
•実行が開始しないときは、「実行ボタン」で実行
•ソースコードを書き替えて再度実行することも可能
trinket でのプログラム実行
6
ソースコードの
メイン画面 実行結果
実行、STOP ボタン
演習
資料:8
【トピックス】
•クラス定義
•class
•オブジェクト生成
•メソッド呼び出し
7
①trinket の次のページを開く
https://trinket.strivemath.org/python/b0698edcb7
② 実行結果が,次のように表示されることを確認
このプログラムは,オブジェクト p を生成する.そして,
メソッド printout を呼び出して,属性値を表示させる
8
クラス階層
クラス階層では,複数のクラスが親子関係をなす
9
クラスA
クラスB
親
子
クラスD
親
子
クラスC
親
子
10
半径 3,場所(2, 4)
色green
半径 1,場所(8, 10)
色blue
クラス Ball
オブジェクト
オブジェクト
場所(1, 2)
色red
クラス Point
オブジェクト
クラス Point
クラス Ball
親
子
Point Ball
属性 属性
x x
y y
color color
r
メソッド メソッド
printout printout
類似した 2つのクラス
11
printout は名前は
同じだが,中身が違う
r の有り無しが
違う
x, y, color は同じ
継承
•親クラスの属性とメソッドは,子クラスに継承
される
•子クラスにおいて,同じ名前のメソッドが別定
義されることもある
12
Point Ball
親子
・属性 r を追加
・メソッド printout は別定義
13
属性 r を追加
メソッド printout は別定義
Point クラスと Ball クラスの定義の例
(クラス階層を考えない場合)
Point Ball
14
x, y, color は同じ
同じようなプログラムを繰り返し書きたいですか?
→No. クラス階層により解決
Point クラスと Ball クラスの定義の例
(クラス階層を考える場合)
Point Ball
15
x, y, color について
繰り返し書くことはなくなる
Point Ball
16
class Ball(Point)
Ball クラスは Point クラスの子である
super(Ball, self).__init__(x, y, color)
親クラスである Point クラスの
メソッド __init__ にアクセス.
その引数は x, y, color
クラス階層を考える場合と考えない場合の違い
17
Point
Ball
Point
Ball
働きは
同じ
クラス階層を考えない クラス階層を考える
演習
資料:19
【トピックス】
•クラス定義
•Class
•サブクラスのクラス定義
18
①trinket の次のページを開く
https://trinket.strivemath.org/python/8f5efe7d0e
② 実行結果が,次のように表示されることを確認
このプログラムは,オブジェクト p, a, b を生成する.そして,
メソッド printout を呼び出して,属性値を表示させる
19