2015年7月15日水曜日

classmethod と staticmethod について

Python はクラス内のメソッドは、通常のインスタンスメソッドのほか、クラスメソッド、スタティックメソッドとして定義することができる。

通常のインスタンスメソッドでは、第1引数にインスタンスオブジェクト(self)が渡されるが、クラスメソッドの場合、クラスオブジェクト(cls)が渡される。
そのため cls を介してアクセスできるのは、クラス変数となる。
# -*- coding: utf-8 -*-
class myClass():
    i = 10

    def __init__(self):
        self.i = 20

    def add(self, x):
        # インスタンス変数に対して、x を加算する。
        return self.i + x

    @classmethod
    def c_add(cls, x):
        # クラス変数に対して、x を加算する。
        return cls.i + x

    @staticmethod
    def s_add(x):
        # クラス変数に対して、x を加算する。
        return myClass.i + x

x = myClass()
print x.add(5)          # 25 が表示される
print x.c_add(5)        # 15 が表示される
print x.s_add(5)        # 15 が表示される
print myClass.s_add(5)  # 15 が表示される

0 件のコメント:

コメントを投稿