Pythonでのクラスメソッド・静的メソッド

Pythonでのクラスメソッド・静的メソッド

クラスのもつメンバ関数として、通常のインスタンスメソッド (instance methods)*1以外に静的メソッドとクラスメソッドが存在する

静的メソッド

静的メソッドは要は引数にselfをもたないクラスのメンバ関数のこと。よってインスタンス変数にはアクセスできない。 これを明示的に表現するために @staticmethodというデコレータが存在する

class A(object):
    ...
    @staticmethod
    def my_static_method():
        print 'I do not access to  A'

クラスメソッド

これは継承(inheritance)を使うときに使用する*2

class A:

    @classmethod
    def introduce(cls):
        print("Hello, I am %s!" %cls)
class SubA(A):
    pass

SubA.introduce()
# Hello, I am __main__.SubA!

引数のclsはなんらかのクラスであり、インスタンスではない。よってこちらもインスタンス変数*3にはアクセスできない。 これが有用なのは継承を行う場合だ。上の例では、継承時のクラス変数の値が子のクラス変数の値となっている点に注意。 またここでclass methodの第一引数のclsはkeywordではなく単なる慣習であることに注意。 この慣習は class methodでは第一引数は実体をもったインスタンス(self)ではなく、 クラスオブジェクト自身であることを明示的に表現するために用いられる.

gogochephy.hatenablog.com

*1: 関数の第一引数に self を必ずもつメソッド

*2:c++のoverloadingと同等の機能を実現できる

*3: initに定義された変数