<Python> class 変数
Python
のクラス変数 class
variable
を少し試してみた。
まずは、下記のクラス作成。
クラス変数 a
と、それを、__init__()
で self.a
で呼び出してみる。
In [98]: class Aaa(): ...: a = 1 ...: def __init__(self): ...: self.x = self.a ...: def cls_show(self): ...: return Aaa.a ...: def ins_show(self): ...: return self.a ...: @classmethod ...: def cls_show2(cls): ...: return cls.a ...:
インスタンス化して、a
を見てみる。
In [99]: A = Aaa() In [100]: A.a Out[100]: 1 In [101]: A.x Out[101]: 1 In [102]: A.cls_show() Out[102]: 1 In [103]: A.ins_show() Out[103]: 1 In [104]: A.cls_show2() Out[104]: 1
全部 1
。
__init__()
時は、クラス変数a
はself.a
で参照できるっぽい。
で、a
に5
を入れてみる。
In [105]: A.a = 5 In [106]: A.a Out[106]: 5 In [107]: A.x Out[107]: 1 In [108]: A.cls_show() Out[108]: 1 In [109]: A.ins_show() Out[109]: 5 In [110]: A.cls_show2() Out[110]: 1
self.a
は5
cls.a
は1
なるほど、ね。 self.a
はインスタンス変数だから、クラス変数を変更しない。
クラス変数a
に20
を代入。
In [111]: Aaa.a = 20 In [112]: A2 = Aaa() In [113]: A2.a Out[113]: 20 In [114]: A2.x Out[114]: 20 In [117]: A2.cls_show() Out[117]: 20 In [118]: A2.ins_show() Out[118]: 20 In [119]: A2.cls_show2() Out[119]: 20
なるほど。
で、インスタンス変数a
に10
を代入。
In [120]: A2.a = 10 In [121]: A2.a Out[121]: 10 In [123]: A2.cls_show() Out[123]: 20 In [124]: A2.ins_show() Out[124]: 10
クラス変数は20
をキープ。
なるほど。。。