Pythonのオブジェクト指向プログラミング第二弾としてクラスメソッドとクラス変数についてまとめていきます
クラスメソッドとは
クラスメソッドとは、インスタンスを生成せずに呼び出すことのできるメソッドのこと
たとえば、三角形を表すTriangleクラスにクラスメソッドとしてareaを定義してみようと思います
class Triangle:
@classmethod
def area(cls, base, height):
return (base * height) / 2
if __name__ == '__main__':
print(Triangle.area(5, 10)) # 結果:25
クラスメソッドを定義する際に次の2点を行いましょう
- デコレーターである @classmethod を付与する
- クラスメソッドの第一引数には 「cls」を渡す
第一引数である「cls」は、クラスそのものを表しているイメージです
今回では、clsがTriangleクラスを表している感じです
したがって、最終行のように、クラス名. の形式でインスタンスを生成しなくても直接呼び出すことができます
クラス変数とは
クラス変数とは、クラスから直接アクセスすることのできる変数のこと
先ほど使用した、Triangleクラスに対して、2という定数を表すクラス変数 CONST を追加します
class Triangle:
CONST = 2
@classmethod
def area(cls, base, height):
return (base * height) / cls.CONST
if __name__ == '__main__':
print(Triangle.CONST) # 結果:2
print(Triangle.area(5, 10)) # 結果:25
クラス変数を使用する際は、「変数名 = 値」の形式で書くだけです
クラス変数はインスタンスう変数とは異なり、「self.」のような修飾を持たないため、クラスメソッドやクラスの外部からでもアクセスすることができます
クラス変数を使用する際の注意点としては、原則として定数のみに使用します。なぜなら、クラス変数を変更してしまうと、コード全体に影響してしまうからです。