Pythonのクラス変数とインスタンス変数


http://hi.baidu.com/xionghy2008/blog/item/0cb862355e5b4b82a71e1256.html
pythonのクラスでは、クラスの属性には2つの作用領域があります.クラス変数、インスタンス変数.
javaとc++のようなstatic変数と一般変数の違い.クラス変数はclass全体で共有されていますが、インスタンス変数は特定のオブジェクトインスタンスにすぎません.
クラス変数とインスタンス変数の動作上の違い
1.  アクセス権限
クラス変数は、クラス名ポイント操作によりアクセスできます.インスタンスポイント操作により、クラスName.varobject Name.varにアクセスできます.
インスタンス変数は、インスタンス名ポイント操作でのみobject Name.varにアクセスできます.
2.  クラス変数変更後の表現
クラス変数は、クラスおよびすべてのインスタンスで共有されるデータが変更され、クラスまたはインスタンスを介して再びアクセスすると新しいデータになります.
クラス変数をobject Name.varによって修正すると、その効果はこの例だけに作用し、再びクラスまたは他のインスタンスを通してアクセスしたのは依然として古いデータである.しかし、この変形形態は、このクラスの変数を具体化し、その結果、このインスタンスは別の変数コピーを得ることになり、その後、このオブジェクトはクラスと名前を共有しなくなる(例示的には個人の定義であり、権威的な説明はまだ見つからない).
 
#coding=gbk
class classA:
    #classvar=''
    def __init__(self):
        pass
    def set_var1(self,x):
        classA.classvar=x
        return classA.classvar
    def set_var2(self,y):
        self.var2=y
        return self.var2

oa=classA()
ob=classA()
oa.set_var1("class variable")
print oa.classvar
print ob.classvar

oa.classvar="changed" #classvar oa          
print oa.classvar
print ob.classvar

oa.set_var1("class variable01")
print oa.classvar
print ob.classvar

ob.set_var1("class variable02")
print oa.classvar
print ob.classvar

ob.set_var2("inst variable")
print ob.var2
print oa.var2  #error! because var2 is a instance variable