目的
Pythonではオブジェクトからメソッドを呼び出して処理を行うことができる.ここでは,メソッドの呼び出し方を学ぶ.
説明
関数とメソッド
関数は,値やオブジェクトを渡すと,処理した結果の値やオブジェクトを返すものだった.メソッドはオブジェクトから処理を呼び出せるようにしたものである.関数とメソッドの違いは,オブジェクトを渡して処理をするか,オブジェクトから処理を呼び出すかであり,それ以外の考え方や使い方はほとんど同じである.
メソッドの呼び出し方(リストオブジェクトのメソッド)
ここまでの説明でも既にリストオブジェクトからappendメソッドを,辞書オブジェクトからkeysメソッド・valuesメソッド・itemsメソッドを呼び出して使用した.ここでは,リストオブジェクトを例にメソッドの呼び出し方を説明する.
引数が1つのメソッド(appendメソッド)
リストオブジェクトの末尾に引数で指定した要素を追加するメソッドにappendメソッドがあった.リストオブジェクトからappendメソッドを呼び出すには,リストオブジェクト名の後ろに「.」をつけ,その後ろにメソッド名appendを記述すればよい.関数と同様にメソッド名の後ろに小括弧で囲んで引数として値を指定すれば,値をメソッドに渡すことができる.例えば,以下のように記述すると,
引数で指定したテストの点数90点をリストの末尾に追加することができる.
引数が複数のメソッド(insertメソッド)
関数と同様にカンマで区切って複数の引数を指定できるメソッドもある.リストオブジェクトの引数で指定したインデックス番号の位置に引数で指定した要素を挿入するメソッドにinsertメソッドがある.例えば,以下のように記述すると,
リストの3番目(インデックス番号2の位置)にテストの点数90点を挿入することができる.
引数がないメソッド(sortメソッド)
関数では値を引数で渡さないものは稀だが,メソッドは既にオブジェクトとしてデータを保持しているため,引数で値を渡さないこともある.リストの要素を昇順にソートするメソッドにsortメソッドがあり,例えば,以下のように記述すると,
テストの点数を昇順にソートすることができる.
キーワード引数をもつメソッド(sortメソッド)
関数と同様にキーワード引数を指定できるメソッドもある.例えば,リストオブジェクトのsortメソッドのキーワードreverseにTrueを指定すると,リストの要素を降順にソートすることができる.例えば,以下のように記述すると,
テストの点数を降順にソートすることができる.
値を返すメソッド(countメソッド)
関数と同様に値を返すメソッドもある.例えば,引数で指定した値がリストオブジェクトにいくつ存在するかを数えるメソッドcountはその数を返す.例えば,以下のように記述すると,
60点をとった試験の科目数(1科目)と70点をとった試験の科目数(2科目)を取得できる.
その他のメソッド
リストオブジェクトのメソッドにはその他に様々なものがある.詳しくは以下のサイトを参考にするとよい.
https://docs.python.org/ja/3/tutorial/datastructures.html
文字列オブジェクトのメソッド
splitメソッド
文字列をスペースで区切って分割するメソッドにsplitメソッドがある.例えば,以下のように記述すると,
スペースで区切られた複数の文字列がリストとして返されることがわかる.
splitメソッドでは引数で区切り文字を指定することができ,例えば以下のようにカンマを区切り文字として指定すると,
カンマで区切られた複数の文字列がリストとして返される.
countメソッド
文字列中にある文字列がいくつ含まれているかを数えるメソッドにcountメソッドがある.例えば以下のように記述すると,
スターウォーズのオープニングクロールに反乱軍を表す「Rebel」という語と帝国軍を表す「Empire」という語がいくつ含まれているかを調べることができる.
replaceメソッド
文字列置換を行うメソッドにreplaceメソッドがある.第1引数に置換前の文字列を,第2引数に置換後の文字列を指定すると,置換された文字列を返す.また,第3引数に整数を指定すると,前から指定した数だけ置換することができる.例えば以下のように記述すると,
スターウォーズのオープニングクロール中の「Rebel」を全て「Resistance」に,「Empire」のうち最初の2つを「Kingdom」に置換することができる.
その他のメソッド
文字列オブジェクトのメソッドにはその他に様々なものがある.詳しくは以下のサイトを参考にするとよい.
https://docs.python.org/ja/3/library/stdtypes.html#string-methods
辞書オブジェクトのメソッド
keysメソッド
辞書のキーのイテラブルなオブジェクトを取得するメソッドにkeysメソッドがある.以下のようにfor文と組み合わせて使うことが多く,
辞書のキーの各要素に対して処理をするときに使用する.
valuesメソッド
辞書の値のイテラブルなオブジェクトを取得するメソッドにvaluesメソッドがある.以下のようにfor文と組み合わせて使うことが多く,
辞書の値の各要素に対して処理をするときに使用する.
itemsメソッド
辞書のキーと値のイテラブルなオブジェクトを取得するメソッドにitemsメソッドがある.以下のようにfor文と組み合わせて使うと,
辞書のキーと値の各要素に対して処理することができる.
その他のメソッド
辞書オブジェクトのメソッドにはその他に様々なものがあります.詳しくは以下のサイトを参考にするとよい.
https://docs.python.org/ja/3/library/stdtypes.html#mapping-types-dict
カメラオブジェクトのメソッド
ここまでは,リスト・文字列・辞書といったPythonで使用できる基本的なオブジェクトのメソッドについて説明した.Pythonでは様々なオブジェクトを使用することができ,中には高度な機能をもつオブジェクトもある.ここでは,高度な機能をもつオブジェクトの例として,OpenCVのカメラオブジェクトを取り上げ,カメラオブジェクトのメソッドを使用して,カメラから画像を取得する方法を説明する.
例えば,以下のように記述すると,カメラから画像を取得し,ウィンドウに画像を表示し続けることができる.ウィンドウをアクティブにした状態で「q」キーを押すとプログラムが終了する.
5行目で,cv2モジュールのVideoCaptureコンストラクタを使用し,カメラオブジェクトを生成し,カメラオブジェクトにcameraという名前をつけている(コンストラクタについては後の単元で説明する).VideoCaptureの引数0は,カメラが複数ある場合にどのカメラを使用するかを指定する数値である.この場合は0番目のカメラに対してカメラオブジェクトを生成している.
7行目で,カメラオブジェクトのreadメソッドを使用して,カメラから画像を取得している.readメソッドは,返り値(正しく画像が取得できたかどうかを表す値)と取得した画像を返す.ここでは,返り値にret,取得した画像にimageという名前をつけている.8行目で取得した画像をウィンドウに表示している.この処理をwhile文中に記述することで,カメラから画像を取得し,取得した画像をウィンドウに表示し続けている.
このままだとプログラムが動き続けるので,9行目でキーの情報を取得し,10,11行目で押されたキーが「q」のときに繰り返しをbreakするようにしている.このようにすることで,「q」キーが押されたときにプログラムが終了するようにしている.waitKey関数の引数1は1ミリ秒待ってキーの情報を取得するという意味である.また,ord関数では文字「q」をunicodeで表した数値に変換している.
13行目では,カメラオブジェクトのreleaseメソッドを使用して,生成したカメラを解放している.14行目では,生成したウィンドウを全て消去している.
このように,高度な機能をもつカメラのようなオブジェクトでもメソッドの呼び出し方は基本的なオブジェクトと同様である.
課題
課題0
英語・数学・国語のテストの点数からなるリストの末尾に理科・社会のテストの点数を追加せよ.
課題1
英語・国語・社会のテストの点数からなるリストに,英語・数学・国語・理科・社会の順になるように,数学・理科のテストの点数を追加せよ.
課題2
英語・数学・国語・理科・社会のテストの点数からなるリストを点数の高いものから順に並べ替えよ.
課題3
1963年8月28日にワシントンで行われたキング牧師の演説を書き起こしたものが載っているWebサイトを探し,演説中に「dream」という単語が何度使われたかを調べよ.
課題4
1963年8月28日にワシントンで行われたキング牧師の演説を書き起こしたものが載っているWebサイトを探し,演説中の「freedom」という単語を「liberty」に全て置換して表示せよ.
課題5
学籍番号,氏名,メールアドレスからなる辞書を作成し,値を繰り返しを使用して表示せよ.
課題6
学籍番号,氏名,メールアドレスからなる辞書を作成し,キーと値を繰り返しを使用して表示せよ.
課題7
カメラから取得した画像をウィンドウに表示し続けよ.
課題8
カメラから取得した画像とそれをグレースケールに変換した画像をウィンドウに表示し続けよ.
課題9
カメラから取得した画像と解像度を変更した画像をウィンドウに表示し続けよ.