Pour définir une variable de classe en Python, vous êtes censé déclarer la variable sous le nom de classe. C'est ce que dit la documentation officielle.
https://docs.python.jp/3/tutorial/classes.html#class-and-instance-variables
sample.py
class Sample:
name = 'name'
s = Sample()
s2 = Sample()
print(s.name) # 'name'
print(s2.name) # 'name'
De toute évidence, les deux sont affichés comme "nom".
Cependant, si vous changez le nom de cette manière, ce ne sera plus une variable de classe.
sample.py
s = Sample()
s2 = Sample()
s.name = 'aaaa'
print(s.name) # 'aaaa'
print(s2.name) # 'name'
Lorsque vous faites cela, «s.name» est affiché comme aaaa et «s2.name» est affiché comme nom. S'il est partagé par tous les objets, s2.name devrait également devenir ʻaaaa`.
La réponse est que les chaînes sont immuables, donc si vous y faites référence via un objet, elles créeront automatiquement des variables d'instance.
Mais quand j'ai essayé Sample.name
, les deux ont changé en aaaa. Il a des caractéristiques en tant que variable de classe. S'interprète-t-il en lisant l'air selon que la source de référence est une classe ou un objet?
Les tableaux et les types de dictionnaire sont modifiables, donc faire ce qui suit propage les changements et les deux impressions s'affichent sous la forme «[1,2,3,4]». C'est naturel parce que cela indique la même chose.
sample.py
class Sample:
a_list = [1,2,3]
s = Sample()
s2 = Sample()
s.a_list.append(4)
print(s.a_list) # [1,2,3,4]
print(s2.a_list) # [1,2,3,4]
Je me demande s'il est correct de dire que même si vous déclarez un immuable sous une classe, il basculera automatiquement vers une variable d'instance, et le mutable reste une variable de classe. En principe, je vais le partager. Mais les données immuables deviennent des variables d'instance lorsqu'elles sont accédées via des objets.
Je me demande si c'est une telle spécification.
Recommended Posts