Das Schrecklichste ist, keine Fehler zu machen, aber sie nicht zu finden. Bis jetzt weiß ich, dass mit meinem Verständnis von Klassenvariablen etwas nicht stimmt.
Vielleicht liegt es möglicherweise an den mangelnden häufigen Gebrauch von Klassenvariablen, und dieses Problem wurde nicht entdeckt . Ich habe nur gelernt, welche Klassenvariablen sie in letzter Zeit C ++ gesehen haben ?
Früher dachte ich, dass der einzige Unterschied zwischen Klassenvariablen und Mitgliedsvariablen darin besteht, dass Klassenvariablen direkt über Klassennamen zugegriffen werden können und statisch sind. Mitgliedervariablen müssen über Instanzen instanziiert und zugegriffen werden.
Ich habe nie erwartet, dass ich ignoriert habe, dass es in einer Klasse nur eine Klassenvariable gibt, und jede Instanz ist gleich. Die Änderung in einer Instanz wirkt sich in anderen Fällen auf die Klassenvariable aus ... (obwohl dies normalerweise keinen Fehler verursacht, muss ich immer noch kognitive Schwachstellen ausgleichen).
Hier sind 2 Beispiele in Java und Python :
public class oo {public static String s; öffentliche Schnur M; static {S = "Ever"; } public static void main (String [] args) {oo o1 = new oo (); Oo o2 = neuer oo (); o1.m = "einmal"; // Der Wert/die Adresse von Klassenvariablen in verschiedenen Fällen ist das gleiche System.out.println (O1.S); System.out.println (o2.s); System.out.println (o1.s.hashcode ()); System.out.println (o2.s.hashcode ()); O1.S = "123"; System.out.println (o2.s); // die Klassenvariable ändern und andere Instanzen system.out.println (o1.m.hashcode ()); System.out.println (O2.M.HashCode ()); // nullPointerexception // Mitgliedsvariablen haben unterschiedliche Adressen}} #!/bin/pythonclass b: def whoami (self): print ("__ class __:%s, self .__ class __:%s"%(__ class __, self .__) class __) class c (b): count = 0 def __init __ (self): super (c, self __ init __ () self = 0 def add (selbst). self.num += 1 def print(self): print("Count_Id:%s,Num_Id:%s"%(id(__class__.count),id(self.num))) print("Count:%d,Num:%d"%(__class__.count,self.num))i1 = C()i2 = C()i1.whoami()i2.whoami()#i1 member variable is increased Bis zum 1. Zeitpunkt wird die Variable der I2 -Mitgliedsvariable um das 2 -fache erhöht und die Klassenvariable im gesamten i1.add () i2.add () i2.add () i1.print () i2.print () um dreimal erhöht.Das obige dreht sich alles um diesen Artikel. Der Urlaub endet morgen. Ich hoffe, jeder wird sich aktiv seiner Arbeit widmen und weiterhin auf die vom Herausgeber geteilten Artikel achten.