2017-09-27 3 views

答えて

2

時に違いはありません価値を得る。 a.xA.x(これはa.__class__.xと同じです)に戻ります。

ただし、値を設定しようとすると、a.x = 13は新しいインスタンス変数を設定します。A.xは元の値になります。その後、a.xは、常にクラス1ではないインスタンス値を見つけるでしょう。

1

違いはなく、同じです。これは、python がどのように属性を検索するかに関係しています。それは等々クラス属性で検索し、それを見つけることができなかった場合

それはまず、インスタンス属性を調べます。

2番目の文(a.__class__.x)では、明示的にpythonにクラスdictを直視させ、インスタンスの参照をスキップします。

1

ここで、a.xは、クラスのインスタンスの変数値(クラスオブジェクトに限定されたスコープ)を返しますが、A.xは、クラス変数の値を返します。あなたは好きなことを確認することがあります。

# create object of class A() 
>>> a = A() 
>>> b = A() 

# same value 
>>> A.x 
12 
>>> a.x 
12 

# updated a.x 
>>> a.x = 5 
>>> A.x # still old value 
12 
>>> a.x # new value 
5 
>>> b.x # old value 
12 

# updated A.x 
>>> A.x = 9 # new value 
>>> A.x 
9 
>>> a.x # old value 
5 
>>> b.x # new value 
9 

結論:あなたは、クラスのインスタンスの値を更新した場合、変更はそのインスタンスに制限されます。ただし、クラス変数の値を変更すると、インスタンスが値を明示的にオーバーライドしていない場合は、変更がすべてのインスタンスに反映されます。

関連する問題