クラスの中でコンストラクタや関数以外の部分で変数を定義して使う


概要



class クラス名:
    変数を定義

でクラス内で変数定義できる。
これはコンストラクタ(__init__)や関数(メソッド)に属していない。

        
class aClass():
    san = 'さん!'

    def __init__(self,name):
        self.name = name + aClass.san

ob01 = aClass('Bob')
print(ob01.name)
        
      
        
aCalssというクラスを以下に定義
    変数sanに「さん!」を入れる

    コンストラクタを定義(引数はname)
        変数nameにname(引数name) + aClass.sanを入れる

ob1にクラスaClassのインスタンスを引数「Bob」作成
ob1のnameを出せ
        
      

print出力

        
Bobさん!
        
      

説明


クラス定義の中で
コンストラクタ(プロパティ)とメソッド(関数)定義以外の部分で定義した変数は
同じ部分ではそのまま使える。たとえば

san = san + 'HELLO'

のように使う。
これらをコンストラクタやメソッド内で使う場合は

クラス名.変数名

で使う。

self.変数名

ではないので注意。
ここは間違えやすいので注意
  

間違えやすい問題


コンストラクタや関数以外で書かれる変数の計算は
コンストラクタや関数より先に実行される
class aClass():
    san = 'さん!'

    def __init__(self,name):
        self.name = name + aClass.san

    san = san + '今日はいい天気ですね!'

ob01 = aClass('Bob')
print(ob01.name)
とすると出力は Bobさん!今日はいい天気ですね! となる。 しかしこの順番だとわかりにくいので クラス内のコンストラクタでも関数内でもない変数や計算は 真っ先に書いた方が順番的にわかりやすい。