コンテンツにスキップ

Class

1. basic

  • クラス名はCamelCaseで記載する
  • インストラクタはdef __init__(self,[変数名]):で記述する ←後ろの__をよく忘れるので注意
  • デストラクタはdef __del__(self):で記述する
  • メソッドの第一引数はselfが必須(呼び出し時は第一引数は設定不要) ←よく忘れるので注意
  • メンバ変数の第一引数はselfが必須 ←よく忘れるので注意
  • クラス内からメンバ変数やメソッドにアクセスする場合には、self.をつける ←よく忘れるので注意
  • pythonには厳密なprivate変数は存在しない そのため、下記のどちらかのルールで明示的に記載する
  • 変数名の先頭にアンダースコアを1つつける
  • 変数名の先頭にアンダースコアを2つつける(ネームマングリングされるため)
python ソースコード
class MyClass(object):
    # コンストラクタ
    def __init__(self,num=1):
        # メンバ変数
        self._num = num

    # デストラクタ
    def __del__(self):
        print("finish")

    # メソッド
    def output(self):
        self.doubleoutput()
    def doubleoutput(self):
        print(self._num * 2)

#------------------------
myclass1 = MyClass(10)
myclass1.output()

myclass2 = MyClass()
myclass2.output()
python 出力結果
20
2
finish
finish

2. 何も書かない場合

  • passを指定するとメンバ変数・メソッド・コンストラクタ等を記述しないクラスを作成出来る
python ソースコード
class VoidClass(object):
    pass
python 出力結果
voidclass = VoidClass()

3. クラス変数

  • 全クラスで共有することが可能なメンバ変数
    python ソースコード
    
    
python 出力結果

4. settrt/getter

  • インスタンス変数を外部に公開する際に、使用すると便利な機能
  • getter関数の上に@propertyを記述する
  • 外部からアクセスする際には、インスタンス変数名.getterメソッド名でアクセスする
  • setter関数の上に@setter関数名.setterを記述する
python ソースコード
class MyClass(object):
    def __init__(self):
        self.__num = 1

    @property
    def num(self):
        return self.__num
    @num.setter
    def num(self,num):
        self.__num = num


myclass = MyClass()
print(myclass.num)
      ^^^^^^^^^^^getter関数のアクセス
myclass.num = 100
print(myclass.num)
python 出力結果
1
100

5. 参考