Alle Objekte teilen sich Klassen- oder statische Variablen. Eine Instanz oder nicht statische Variablen sind für verschiedene Objekte unterschiedlich (jedes Objekt hat eine Kopie). Lassen Sie beispielsweise einen Informatikstudenten durch eine Klasse vertreten CSStudent . Die Klasse kann eine statische Variable haben, deren Wert für alle Objekte cse ist. Und die Klasse kann auch nicht statische Mitglieder haben, z Name Und rollen .
In C++ und Java können wir statische Schlüsselwörter verwenden, um eine Variable zu einer Klassenvariablen zu machen. Die Variablen, denen kein statisches Schlüsselwort vorangestellt ist, sind Instanzvariablen. Hier finden Sie das Java-Beispiel und hier das C++-Beispiel.
Erläuterung:
In Python ist eine statische Variable eine Variable, die von allen Instanzen einer Klasse gemeinsam genutzt wird und nicht für jede Instanz eindeutig ist. Sie wird manchmal auch als Klassenvariable bezeichnet, da sie zur Klasse selbst und nicht zu einer bestimmten Instanz der Klasse gehört.
Statische Variablen werden innerhalb der Klassendefinition definiert, jedoch außerhalb etwaiger Methodendefinitionen. Sie werden normalerweise wie eine Instanzvariable mit einem Wert initialisiert, können jedoch über die Klasse selbst und nicht über eine Instanz auf sie zugegriffen und geändert werden.
Merkmale statischer Variablen
- Statischen Variablen wird einmalig Speicher zugewiesen, wenn das Objekt für die Klasse zum ersten Mal erstellt wird.
- Statische Variablen werden außerhalb von Methoden, aber innerhalb einer Klasse erstellt
- Auf statische Variablen kann über eine Klasse zugegriffen werden, jedoch nicht direkt über eine Instanz.
- Das Verhalten statischer Variablen ändert sich nicht für jedes Objekt.
Der Python-Ansatz ist einfach; es ist kein statisches Schlüsselwort erforderlich.
Notiz: Alle Variablen, denen ein Wert zugewiesen ist Die Klassendeklaration sind Klassenvariablen. Und Variablen Das werden innerhalb von Methoden Werte zugewiesen, die Instanzvariablen sind.
vergleiche mit Strings in Java
Beispiel:
Python
# Python program to show that the variables with a value> # assigned in class declaration, are class variables> # Class for Computer Science Student> class> CSStudent:> >stream>=> 'cse'> # Class Variable> >def> __init__(>self>,name,roll):> >self>.name>=> name># Instance Variable> >self>.roll>=> roll># Instance Variable> # Objects of CSStudent class> a>=> CSStudent(>'Geek'>,>1>)> b>=> CSStudent(>'Nerd'>,>2>)> print>(a.stream)># prints 'cse'> print>(b.stream)># prints 'cse'> print>(a.name)># prints 'Geek'> print>(b.name)># prints 'Nerd'> print>(a.roll)># prints '1'> print>(b.roll)># prints '2'> # Class variables can be accessed using class> # name also> print>(CSStudent.stream)># prints 'cse'> # Now if we change the stream for just a it won't be changed for b> a.stream>=> 'ece'> print>(a.stream)># prints 'ece'> print>(b.stream)># prints 'cse'> # To change the stream for all instances of the class we can change it> # directly from the class> CSStudent.stream>=> 'mech'> print>(a.stream)># prints 'ece'> print>(b.stream)># prints 'mech'> |
>
>Ausgabe
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Ausgabe:
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Beispiel:
Python
class> MyClass:> >static_var>=> 0> >def> __init__(>self>):> >MyClass.static_var>+>=> 1> >self>.instance_var>=> MyClass.static_var> obj1>=> MyClass()> print>(obj1.instance_var)># Output: 1> obj2>=> MyClass()> print>(obj2.instance_var)># Output: 2> print>(MyClass.static_var)># Output: 2> |
>
>Ausgabe
1 2 2>
Erläuterung:
In diesem Beispiel definieren wir eine Klasse MyClass, die über eine statische Variable static_var verfügt, die auf 0 initialisiert ist. Wir definieren außerdem eine Instanzvariable Instanz_var, die für jede Instanz der Klasse eindeutig ist.
Wenn wir eine Instanz der Klasse (obj1) erstellen, erhöhen wir den Wert der statischen Variablen um 1 und weisen ihn der Instanzvariablen zu. Wenn wir eine weitere Instanz der Klasse (obj2) erstellen, erhöhen wir die statische Variable erneut und weisen den neuen Wert der Instanzvariablen für diese Instanz zu.
Schließlich geben wir den Wert der statischen Variablen mithilfe der Klasse selbst und nicht einer Instanz der Klasse aus. Wie Sie sehen, wird der Wert der statischen Variablen von allen Instanzen der Klasse gemeinsam genutzt und jedes Mal erhöht, wenn eine neue Instanz erstellt wird.
Statische Variablen können nützlich sein, um den Status aller Instanzen einer Klasse aufrechtzuerhalten oder um Daten zwischen allen Instanzen einer Klasse auszutauschen. Es ist jedoch wichtig, sie sorgfältig zu verwenden und sicherzustellen, dass ihre Werte mit dem Status des Programms synchronisiert sind, insbesondere in einer Multithread-Umgebung.
Vorteile:
- Speichereffizienz: Da statische Variablen von allen Instanzen einer Klasse gemeinsam genutzt werden, können sie Speicher sparen, da nicht mehrere Kopien derselben Daten erstellt werden müssen. Gemeinsamer Status: Statische Variablen können eine Möglichkeit bieten, den gemeinsamen Status aller Instanzen einer Klasse aufrechtzuerhalten, sodass alle Instanzen auf dieselben Daten zugreifen und diese ändern können. Einfacher Zugriff: Auf statische Variablen kann über den Klassennamen selbst zugegriffen werden, ohne dass eine Instanz der Klasse erforderlich ist. Dies kann den Zugriff auf und die Änderung der in einer statischen Variablen gespeicherten Daten erleichtern. Initialisierung: Statische Variablen können beim Definieren der Klasse initialisiert werden, sodass leicht sichergestellt werden kann, dass die Variable einen gültigen Startwert hat. Lesbarkeit: Statische Variablen können die Lesbarkeit des Codes verbessern, da sie deutlich anzeigen, dass die in der Variablen gespeicherten Daten von allen Instanzen der Klasse gemeinsam genutzt werden.
Nachteile:
- Inflexibilität: Statische Variablen können unflexibel sein, da ihre Werte von allen Instanzen der Klasse gemeinsam genutzt werden, was es schwierig macht, unterschiedliche Werte für verschiedene Instanzen zu haben. Versteckte Abhängigkeiten: Statische Variablen können versteckte Abhängigkeiten zwischen verschiedenen Teilen des Codes erzeugen, was es schwierig macht, den Code zu verstehen und zu ändern. Thread-Sicherheit: Statische Variablen können in einer Multithread-Umgebung problematisch sein, da sie zu Rennbedingungen und Synchronisierungsproblemen führen können, wenn sie nicht ordnungsgemäß synchronisiert werden. Namespace-Verschmutzung: Statische Variablen können den Namespace der Klasse erweitern, was möglicherweise zu Namenskonflikten führt und die Pflege des Codes erschwert. Testen: Statische Variablen können das Schreiben effektiver Komponententests erschweren, da der Status der statischen Variablen das Verhalten der Klasse und ihrer Methoden beeinflussen kann.
Insgesamt können statische Variablen ein nützliches Werkzeug in der Python-Programmierung sein, sie sollten jedoch mit Vorsicht und im Hinblick auf mögliche Nachteile wie Inflexibilität, versteckte Abhängigkeiten und Bedenken hinsichtlich der Thread-Sicherheit verwendet werden.