ホームページ  >  に質問  >  本文

python - class 类的问题

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

PHPzPHPz2740日前592

全員に返信(4)返信します

  • ringa_lee

    ringa_lee2017-04-18 10:25:43

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

    返事
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-18 10:25:43

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

    リーリー

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 10:25:43

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

    まず 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
  • PHP中文网

    PHP中文网2017-04-18 10:25:43

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

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

    返事
    0
  • キャンセル返事