Python - クラス - クラスメソッドとスタティックメソッド
公開日:2019-03-04 更新日:2019-05-29
[Python]
1. 概要
クラスメソッドとスタティックメソッド(staticメソッド)の使い方です。
クラスメソッドとスタティックメソッドは、インスタンス(オブジェクト)を生成しなくても使えるメソッドです。
クラスメソッドには、@classmethod を付け、
スタティックメソッドには、@staticmethod を付けます。
クラスメソッドとスタティックメソッドの違いは、引数です。
クラスメソッドの場合は、第1引数にクラス(cls)が渡されるため、これを使ってクラス変数を使用することができます。
スタティックメソッドでクラス変数を使う場合は、常に「クラス名.クラス変数名」とする必要があります。
クラスメソッドとスタティックメソッドは、インスタンス(オブジェクト)を生成しなくても使えるメソッドです。
クラスメソッドには、@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