なんだかGoodVibes

日々の勉強メモです。

【Python】メソッドの種類

こんにちは。
本日はPythonメモです。

概要

Pythonで使用される以下のメソッドについて
本記事は記載します。


インスタンスメソッド

インスタンスメソッドは、第一引数が「self」となります。
インスタンスメソッドへのアクセスは、インスタンスの生成が必要となります。
メソッドにアクセスするには、インスタンス名.メソッド名()とします。

以下に例を記載します。

class MyClass():
    def __init__(self, n):
        self.name = n
        self.message = []

    def add_message(self, msg):
        self.message.append(msg)

    def show_message(self):
        print(f'[from {self.name}]')
        print(*self.message)

m_bob = MyClass('Bob')
m_bob.add_message('Hello')
m_bob.add_message('World')
m_bob.show_message()

m_kevin = MyClass('Kevin')
m_kevin.add_message('こんにちは')
m_kevin.add_message('世界')
m_kevin.show_message()

実行結果は以下です。

[from Bob]
Hello World
[from Kevin]
こんにちは 世界


クラスメソッド

クラスメソッドは、第一引数が「cls」となります。
クラスメソッドでクラスに変更を加えた場合、すべてのオブジェクトに影響を与えます。
「@classmethod」デコレータを設定します。
メソッドにアクセスするには、クラス名.メソッド名()とします。

先程のクラスにクラスメソッドを追加します。
ユーザーの数(インスタンスを生成された回数)を表示するメソッドを追加します。

class MyClass():
    user_count = 0

    def __init__(self, n):
        MyClass.user_count += 1
        self.name = n
        self.message = []

    def add_message(self, msg):
        self.message.append(msg)

    def show_message(self):
        print(f'[from {self.name}]')
        print(*self.message)

    @classmethod
    def show_user_count(cls):
        print(f'user count = {cls.user_count}')

m_bob = MyClass('Bob')
m_kevin = MyClass('Kevin')

MyClass.show_user_count()

実行結果は以下です。

user count = 2


スタティックメソッド

スタティックメソッドはクラスにもオブジェクトにも影響を与えません。
引数には、「self」も「cls」も与える必要はありません。 「@staticmethod」デコレータを設定します。
メソッドにアクセスするには、インスタンス名.メソッド名()もしくは
クラス名.メソッド名()とします。

先程のクラスにクラスメソッドを追加します。
ユーザーの数(インスタンスを生成された回数)を表示するメソッドを追加します。
(クラスメソッドと同様の機能)

class MyClass():
    user_count = 0

    def __init__(self, n):
        MyClass.user_count += 1
        self.name = n
        self.message = []

    def add_message(self, msg):
        self.message.append(msg)

    def show_message(self):
        print(f'[from {self.name}]')
        print(*self.message)

    @classmethod
    def show_user_count(cls):
        print(f'user count = {cls.user_count}')

    @staticmethod
    def show_user_count_static():
        print(f'user count = {MyClass.user_count}')

m_bob = MyClass('Bob')
m_kevin = MyClass('Kevin')

m_bob.show_user_count_static()
MyClass.show_user_count_static()

実行結果は以下です。

user count = 2
user count = 2

スタティックメソッドは、クラス変数にアクセスする場合
クラス名.変数名とします。



以上です。