python - class 类的问题
PHPz
PHPz 2017-04-18 10:23:43
0
4
613
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

学习是最好的投资!

répondre à tous(4)
左手右手慢动作

Les attributs de classe sont équivalents aux variables statiques en Java et appartiennent à des classes.
Parce que vous définissez l'attribut d'instance de c ici c.count+=10.
Donc print(c.count) vaut 10

伊谢尔伦

Parce que c.count+=10 équivaut à ajouter dynamiquement un attribut d'instance à l'objet d'instance c. Lors de l'impression de c.count, l'attribut d'instance sera imprimé à la place de l'attribut de classe

In [1]: class C:
   ...:     c= 10
   ...:

In [2]: c = C()

In [3]: c.c
Out[3]: 10

In [4]: c.c = 1000

In [5]: c.__dict__
Out[5]: {'c': 1000}

In [6]: c.__class__.__dict__
Out[6]: {'__doc__': None, '__module__': '__main__', 'c': 10}

In [7]: c.__class__.c
Out[7]: 10

In [8]:
巴扎黑

Vous pouvez le regarder étape par étape.

Instanciez d’abord trois objets de classe C.
Imprimez les valeurs de comptage de a, b, c.

Cela implique l'ordre de recherche d'un attribut.
Tout d'abord, vérifiez si l'instance a une valeur de comptage. Si elle ne peut pas être trouvée, elle recherchera le niveau supérieur. Le niveau supérieur de l'instance est la classe. S'il s'avère qu'il y a un nombre dans l'attribut de classe, le nombre ici sera affiché.

c.count += 10
À l'origine, c.count fait référence à C.count, mais maintenant lui attribuer une nouvelle valeur équivaut à l'instance c ayant l'attribut count.
Imprimez les valeurs de comptage de a, b, c, C. À ce stade, l’instance c possède déjà sa propre valeur de comptage.

C.count += 100
Modifiez la valeur de comptage de la classe C. c a sa propre valeur de comptage, et a et b font toujours référence à la valeur de comptage de C.

C’est probablement à ça que ça ressemble.

洪涛

En une phrase : lorsqu'une instance attribue une valeur à une variable statique d'une classe, elle ajoute en fait dynamiquement des attributs à l'instance. Cela n'aura aucun impact sur les attributs statiques. Lorsque les attributs statiques entrent en conflit avec les attributs de l'instance, cela n'aura aucun impact sur les attributs statiques. l'ordre d'accès à l'instance est La priorité est : instance-》class

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

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal