クラスで直接宣言された属性はクラス属性と呼ばれます。 あなたの例のように(インデントや構文が間違っていますが)、value1、value2、およびvalue3はクラスgaurabのクラス属性です。
他の属性内で宣言された属性は、インスタンス属性であり、宣言されているクラス属性にバインドされています。 value1とvalue2のように、変数はのクラスにバインドされています。
クラス属性は、C++、JAVAなどの静的型付き言語で見つかる静的変数と比較されます。 クラス属性はクラスのすべてのインスタンスで共有されるため、そのような属性のコピーは1つだけ作成されますクラスのインスタンスにはインスタンス変数のコピーがあります)。
クラスsomething
のインスタンスが作られると、something
の__init__
方法がself
パラメータで新しいインスタンスを受信し、実行します。このメソッドは、2つのインスタンス属性、すなわちvalue1
とvalue2
を作成します。次に、このインスタンスはインスタンス変数に割り当てられます。したがって、この2つのインスタンス属性を持つものにバインドされます。例えば
:このクラスの定義については
class foo:
def __init__(self):
self.Alist=[] #It is an instance attribute
Blist=[] #It is a class attribute
は、我々として2クラスのインスタンスを作成する場合:Blist
属性は両方var1
とvar2
しかしAlist
属性によって共有されている
var1 = foo()
var2 = foo()
のために異なっています両方とも。だから、私たちは次のように操作した場合:
var1.Alist.append(1)
var1.Blist.append(10)
var2.Alist.append(2)
var2.Blist.append(20)
print(var1.Alist)
print(var1.Blist)
print(var2.Alist)
print(var2.Blist)
の出力は次のようになります。
[1]
[10]
[2]
[10,20]
Blist
変数がそうvar1
とvar2
の両方で共有されたので、これは、変更var1.Blist
の場合はvar2.Blist
になり、その逆の場合も同様です。 しかし、var1.Alist
とvar2.Alist
は互いに独立しています。
属性をクラスのすべてのインスタンスに共通にしたい場合は、クラス属性として宣言します(必要でない場合はそれをインスタンス属性として宣言できます)。
あなたのインデントが間違っています!また、ここで見たいと思っている:http://stackoverflow.com/questions/8959097/what-is-the-difference-between-class-and-instance-variables-in-python – elena