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

公開日:2019-03-04 更新日:2019-05-29
[Python]

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