似た機能を持つ関数とメソッド
Pythonのライブラリには、メソッドと同等の機能を持つ関数を提供するものがある。ここでは、同等の機能を有する
配列型のインスタンスが有するメソッド
NumPyライブラリが提供する関数
について解説する。
パターン1:インスタンスが提供する関数=メソッド
ここでは、配列型のオブジェクトが有するmaxメソッドを用いて、最大値を取得する例を示します。
code:lib_func1.py
import numpy as np
print(x.max()) # (1)
print(y.max()) # (1)
ここでの書式は次のようになる。
【インスタンスに割り当てた変数名】.【メソッド名】(【引数】)
この例では、maxメソッドを引数無しで呼び出している。
パターン2:ユーザ定義関数
上の例はビルトインオブジェクトのメソッドを利用しました。次に、同等の機能を持つユーザ関数を使ってみよう。
code:lib_func2.py
import numpy as np
def max(a):
n = 0
for i in a:
if n < i:
n = i
return n
print(max(x)) # (1)
print(max(y)) # (1)
あまり丁寧ではない作りだが、与えられた1次元配列の最大値を求めている。ここでの書式は次のようになることに注意。
【関数名】(【引数】)
パターン1の場合との違いをよく理解しよう。
メソッドはインスタンスに属しているため、インスタンスの数だけ存在する。そのためそれが属するインスタンスを特定するために、【インスタンスに割り当てた変数名】を用いる。(パターン1)
それに対して関数は1つしか存在しないので、関数名だけで特定することができる。(パターン2)
パターン3:ライブラリが提供する関数(本題)
インスタンスがもつメソッドと同じ機能をもつ関数を、ライブラリが提供していることがあります。
code:lib_func3.py
import numpy as np
print(np.max(x)) # (1)
print(np.max(y)) # (1)
この書式はつぎのようになっています。
【モジュール名】.【関数名】(【引数】)
(別モジュール内のオブジェクト利用)で説明したやりかたで、読み込み先のモジュールで定義された関数を呼び出しています。これもパターン1の場合とよく比較してください。 ~~~~~~~~~~~~~~~
関数を使うやりかたは、これまでに学んだC言語的な書き方であり、メソッドを使うやりかたは、オブジェクト指向的な書き方であると言える。 code:sample.py
関数(インスタンス、引数)
インスタンス.メソッド(引数)
後者の方が、「何に対して働きかけているのか?」を明確に読み取ることができる。