class myClass(): i = 0とした場合、i がクラス変数となる。
class myClass(): i = 1 myClass.i += 10 print myClass.i # クラス変数が更新されているため 11 と表示される。 c1 = myClass() print c1.i # クラス変数が更新されているため 11 と表示される。 c1.i += 10 print c1.i # c1 は myClass のインスタンスであるため、c1.i はインスタンス変数 print myClass.i # よって c1,i (=21) と myClass.i (=11) は値が異なる。生成されるインスタンスに影響を及ぼすため、よほどの事情がない限り、クラス変数を更新することは控えたほうが望ましいと思われる。
インスタンス変数はインスタンスごとに領域を有する。
インスタンス変数は、self.変数名 で初期化する。クラス変数との違いは、クラス変数はクラス定義で変数宣言するが、インスタンス変数はメソッドの中で初期化することである。
class myClass(): def __init__(self): self.i = 0クラス変数、インスタンス変数とも、値を取得する場合は self.変数名で取得する。
ただし、クラス変数を self 経由で取得する際、同名のインスタンス変数がある場合は、それが優先される。
class myClass(): i = 100 j = 200 def __init__(self): self.i = 0 def show(self): print self.i # インスタンス変数 (0) が表示される。 print self.j # クラス変数 (200) が表示される。 print myClass.i # クラス変数 (100) が表示される。 c1 = myClass() c1.show()
0 件のコメント:
コメントを投稿