🐍

メソッドを呼び出すときにselfが必要かどうか

2024/05/24に公開

クラスの中のメソッドを呼び出す際に self が必要かどうかは、メソッドがインスタンスメソッドかどうかに依存します。Pythonにはインスタンスメソッド、クラスメソッド、スタティックメソッドの3種類のメソッドがあります。それぞれのメソッドの呼び出し方について説明します。

1. インスタンスメソッド

インスタンスメソッドは、クラスのインスタンスにバインドされ、インスタンスの属性や他のメソッドにアクセスできます。インスタンスメソッドの第一引数は常に self であり、これはメソッドを呼び出したインスタンスそのものを指します。

class MyClass:
    def instance_method(self):
        print("This is an instance method")
        print(self)

# インスタンスの作成
my_instance = MyClass()

# インスタンスメソッドの呼び出し
my_instance.instance_method()

2. クラスメソッド

クラスメソッドは、クラス自体にバインドされます。クラスメソッドの第一引数は cls であり、これはメソッドを呼び出したクラスそのものを指します。クラスメソッドは @classmethod デコレータでデコレートされます。

class MyClass:
    @classmethod
    def class_method(cls):
        print("This is a class method")
        print(cls)

# クラスメソッドの呼び出し
MyClass.class_method()
# または
my_instance = MyClass()
my_instance.class_method()

3. スタティックメソッド

スタティックメソッドは、クラスやインスタンスにバインドされず、クラスのどの部分にもアクセスしません。スタティックメソッドは @staticmethod デコレータでデコレートされます。

class MyClass:
    @staticmethod
    def static_method():
        print("This is a static method")

# スタティックメソッドの呼び出し
MyClass.static_method()
# または
my_instance = MyClass()
my_instance.static_method()

まとめ

  • インスタンスメソッド: メソッドの第一引数として self が必要です。インスタンスメソッドを呼び出すときは、インスタンスを通じて呼び出します。
  • クラスメソッド: メソッドの第一引数として cls が必要です。クラスメソッドを呼び出すときは、クラスまたはインスタンスを通じて呼び出します。
  • スタティックメソッド: selfcls も必要ありません。スタティックメソッドを呼び出すときは、クラスまたはインスタンスを通じて呼び出します。

インスタンスメソッドの呼び出し例

インスタンスメソッドをクラス内から呼び出す場合も self を使います。

class MyClass:
    def instance_method(self):
        print("This is an instance method")

    def another_method(self):
        # 同じインスタンスの別のメソッドを呼び出す
        self.instance_method()

# インスタンスの作成
my_instance = MyClass()
my_instance.another_method()

この例では、another_method 内で self.instance_method() を呼び出しています。これにより、同じインスタンスの instance_method が呼び出されます。

クラスメソッドの呼び出し例

クラスメソッドをクラス内から呼び出す場合は cls を使います。

class MyClass:
    @classmethod
    def class_method(cls):
        print("This is a class method")

    @classmethod
    def another_class_method(cls):
        # 同じクラスの別のクラスメソッドを呼び出す
        cls.class_method()

# クラスメソッドの呼び出し
MyClass.another_class_method()

スタティックメソッドの呼び出し例

スタティックメソッドをクラス内から呼び出す場合は、クラス名を使います。

class MyClass:
    @staticmethod
    def static_method():
        print("This is a static method")

    @staticmethod
    def another_static_method():
        # 同じクラスの別のスタティックメソッドを呼び出す
        MyClass.static_method()

# スタティックメソッドの呼び出し
MyClass.another_static_method()

上記の説明を参考に、self を使う場面や使わない場面を理解し、適切にメソッドを呼び出してください。

Discussion