コンテンツにスキップ

静的な定義

メンバ変数/静的メンバ変数

  • メソッド外で定義すると全クラス共通のメンバ変数として使用出来る
  • クラス名.メンバ変数名でアクセス可能(インスタンス化しなくても参照することが出来る)
python ソースコード
class StaticMyClass():
    data = "test"

myclass = StaticMyClass()
myclass2 = StaticMyClass
print(myclass.data)
print(myclass2.data)
print(StaticMyClass.data)  インスタンス化しなくても参照可能
python 出力結果
test
test
test

クラスメソッド

  • メソッド名の上に@classmethodの属性を記載する
  • 引数にはselfの代わりにclsを記述する
  • クラス変数を参照したい場合、メンバ変数の頭にcls.を付与する
  • クラス名.メソッド名でアクセス可能(インスタンス化しなくても参照することが出来る)
python ソースコード
class StaticMyClass(object):
    num = 1

    @classmethod
    def func(cls):
        print("sample",cls.num)

myclass = StaticMyClass()
myclass2 = StaticMyClass
myclass.func()
myclass2.func()
StaticMyClass.func() インスタンス化しなくても参照可能
python 出力結果
sample 1
sample 1
sample 1

スタティックメソッド

  • メソッド名の上に@staticmethodの属性を記載する
  • 引数にはselfclsは不要
  • メンバ変数にアクセスすることができない!
python ソースコード
class StaticMyClass(object):
    @staticmethod
    def func():
        print("sample")

myclass = StaticMyClass()
myclass2 = StaticMyClass
myclass.func()
myclass2.func()
StaticMyClass.func()
python 出力結果
sample
sample
sample