Python の関数とメソッド


こんにちは、切口太郎です。

Python でちょっとややこしい、関数とメソッドについてお話します。

「呼び方が違うだけじゃん!」と思いがちですが、一応、Python は、メソッドと関数を分けています。
その定義について、軽くお話します。

開発の現場では、結構、ごっちゃに話している場合も多いので、厳密に定義する必要も無いかも知れません。
(まぁ、どっちかに統一して話しても、会話は通じます。)

せっかく Python を学ぶのであれば、きちんと定義だけ覚えておきましょう! という内容です。

とても軽い内容なので、気楽に読んで下さい。

python で以下のサンプルのget_max_valueを関数と呼びますか? メソッドと呼びますか?

def get_max_value(list):
     default_max_value = 1000
     returndefault_max_value
これは、関数です。



では、こちらの getMaxValue は?

class Sample:
    def __init(_self_ . maxValue):
       _self_._maxValue_ = maxValuie

    def getMaxValue(_self_):
        return _self_._maxValue_

これは、メソッドです。

中身は同じなのですが、Python では次のように分類しています。

クラスの中に記述されているのは「メソッド」、クラスの外部または、クラスなしのモジュールに記述されているのを「関数」と呼んでいます。

メソッドでは、暗黙引数の _self_ があるのが特徴です。

また、関数はインスタンス化しないで呼び出せますが、メソッドはクラスをインスタンス化しないと呼び出せません。
(例外で、@staticmethod というデコレーターをつけるとインスタンス化しないで呼び出せます)


なんで、同じ def で定義しているのに2つの方法があるのでしょう?
不思議ですよね。

これについては、調べたのですが正直、明確な理由が見つけられませんでした。
古い Pythonでは、クラスを使わずに、モジュールに関数を定義して利用するのが普通だったという話が有力な気もしていますが、そんな古い時代から Python を使っていないので、真偽のほどはわかりません。

もし、「こういう理由だよ」というのをご存知の方がいらっしゃったら是非、教えて頂けると嬉しいです。


コメント

このブログの人気の投稿

Python のファイルアクセス

Lambda について

Visual Studio Code での Python 開発のポイント