Python - クラス - クラスメソッドとスタティックメソッド

公開日:2019-03-04

1. 概要

クラスメソッドとスタティックメソッド(staticメソッド)の使い方です。
クラスメソッドとスタティックメソッドは、インスタンス(オブジェクト)を生成しなくても使えるメソッドです。
クラスメソッドには、メソッドに @classmethod を付け、
スタティックメソッドには、メソッドに @staticmethod を付けます。

クラスメソッドとスタティックメソッドの違いは、引数です。
クラスメソッドの場合は、第1引数にクラス(cls)が渡されるため、これを使ってクラス変数を使用することができます。
スタティックメソッドでクラス変数を使う場合は、常に「クラス名.クラス変数名」とする必要があります。

2.1 クラスメソッド

ソース
class Calculator:

    @classmethod
    def add(cls, value1, value2):
        return value1 + value2

print (Calculator.add(1, 2))

実行結果
3

2.2 スタティックメソッド

ソース
class Calculator:

    @staticmethod
    def add(value1, value2):
        return value1 + value2

print (Calculator.add(1, 2))

実行結果
3

2.2 クラスを継承した時のスタティックメソッド

クラスを継承してスタティックメソッドを呼んだ時の第1引数には、呼び出し時に指定したクラスが入ります。
これにより、クラス変数の参照先が変わります。

ソース
class Test:
  
    class_value = 1
    
    @classmethod
    def test(cls):
        print(cls.class_value)
    
class TestEx(Test):
    class_value = 100
    
Test.test()
TestEx.test()

実行結果
1
100