メソッド関数は、何が違うのか。そもそも何で呼び分けるのか。メソッドの実体も同じく関数なので、このような疑問を抱くのは当然です。

メソッドとは「クラス内で定義された関数」や「オブジェクトの属性として参照される関数」などと説明されますが、クラスを学んでいない段階で、この説明を聞いてもピンときません。

しかし、一般的なPythonの参考書では、リストのappend()メソッドなどは、クラスのページのずっと前に登場します。関数とメソッドの違いは、クラスを学んでからでないと理解できないのでしょうか。いいえ、「使い方」に着目すれば、簡単に区別できます。

今回はオブジェクト指向プログラミング(OOP)の概念に触れないで、関数とメソッドの違い」をわかりやすく説明します。

呼び出し方の違いに着目する

使い方、つまり呼び出し方の違いに着目すると、関数とメソッドは以下のように区別されます。

  • 単独で呼び出しできるのが「関数
  • 変数や値に付けて呼び出すのが「メソッド

例えば、Pythonの組み込み関数print()len()などは単独で呼び出せる「関数」です。

>>> print("Hi, Ichiro.")
Hi, Ichiro.
>>> len(["one", "two", "three"])
3

一方、リストに要素を追加するappend()や文字列を繋ぐjoin()変数や値に付けて呼び出す「メソッド」です。以下のように変数や値の後にドット.)を付けて呼び出します。

>>> num_list = ["one", "two"]
>>> num_list.append("three")
>>> num_list
['one', 'two', 'three']
>>> "+".join(num_list)
'one+two+three'

メソッドの種類はデータ型で異なる

上の例のappend()join()は、それぞれリスト型文字列型に準備されているメソッドです。メソッドはデータ型に紐付いた関数なので、このように呼び出せる種類はデータ型で異なります。

例えば、以下の表からappend()メソッドは、リスト型の変数については使えますが、辞書型からは呼び出せません。一方、pop()のように両方で使えるメソッドもあります。

変数や値のデータ型 使用できるおもなメソッド
リスト型(list) append()pop()extend()sort()
辞書型(dict) get()pop()update()items()

紛らわしいケース

モジュールの関数もドット(.)を付けて呼び出します。メソッドと混同しやすいので気をつけてください。例えば、以下のgetcwd()は、osモジュール関数です。

>>> import os
>>> os.getcwd()
'/Users/ichiro'

getcwd()のドットの前のosモジュール名ですが、メソッドの場合はドットの前が変数や値になります(つまり、データ型を有するもの)。

最後に

メソッドと関数は「そもそも何で呼び分ける必要があるのか」と疑問に感じると思いますが、今回説明したように使い方(呼び出し方)が違うので、明確に区別しておきます。

プログラミング言語はプログラムを作成するための「道具」です。道具には必ず使い方があります。だから、概念がよく理解できない時は、使い方からアプローチすると「何のための道具なのか」が次第に分かってきます。