python - class 类的问题
PHPz
PHPz 2017-04-18 10:23:43
0
4
589
class C:
    count=0
    
a=C()
b=C()
c=C()

print(a.count)
print(b.count)
print(c.count)

c.count+=10

print(c.count)
print(a.count)
print(b.count)
print(C.count)

C.count+=100

print(a.count)
print(b.count)
print(c.count)
0
0
0

10
0
0
0

100
100
10

为什么后来a.count b.count的值都是100 而c.count的值是10

PHPz
PHPz

学习是最好的投资!

全員に返信(4)
左手右手慢动作

クラス属性は Java の静的変数に相当し、クラスに属します。
ここで c のインスタンス属性を c.count+=10 と定義しているためです。
つまり、print(c.count) は 10 です

いいねを押す +0
伊谢尔伦

c.count+=10 は、インスタンスオブジェクト c にインスタンス属性を動的に追加することと同等であるため、c.count を出力すると、クラス属性の代わりにインスタンス属性が出力されます

リーリー
いいねを押す +0
巴扎黑

段階的に見ることができます。

まず 3 つの C クラス オブジェクトをインスタンス化します。
a、b、cのカウント値を出力します。

これには属性の検索順序が関係します。
まず、インスタンスにカウント値があるかどうかを確認し、見つからない場合は上位レベルを検索します。インスタンスの上位がクラスになります。class属性にcountがある場合は、ここのcountが出力されます。

c.count += 10
元々、c.count は C.count を参照しますが、それに新しい値を割り当てることは、count 属性を持つ c インスタンスと同等になります。
a、b、c、Cのカウント値を出力します。この時点で、インスタンス c はすでに独自のカウント値を持っています。

C.count += 100
クラスCのカウント値を変更します。 c には独自のカウント値があり、a と b は引き続き C のカウント値を参照します。

たぶんそんな感じです。

いいねを押す +0
洪涛

一言で言えば、インスタンスがクラスの静的変数に値を割り当てるとき、静的属性がインスタンスの属性と競合する場合、その順序は実際には動的にインスタンスに追加されます。インスタンスへのアクセスが優先される: インスタンス》クラス

https://segmentfault.com/a/11...

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!