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 件のコメント:
コメントを投稿