Všetky objekty zdieľajú triedu alebo statické premenné. Inštancia alebo nestatické premenné sú rôzne pre rôzne objekty (každý objekt má kópiu). Nechajte napríklad študenta informatiky reprezentovať triedu CSSštudent . Trieda môže mať statickú premennú, ktorej hodnota je cse pre všetky objekty. A trieda môže mať aj nestatické členy ako napr názov a rolovať .
V C++ a Java môžeme použiť statické kľúčové slová na to, aby sa premenná stala premennou triedy. Premenné, ktoré nemajú predchádzajúce statické kľúčové slovo, sú premenné inštancie. Pozrite si toto pre príklad Java a toto pre príklad C++.
Vysvetlenie:
V Pythone je statická premenná premenná, ktorá je zdieľaná medzi všetkými inštanciami triedy a nie je jedinečná pre každú inštanciu. Niekedy sa tiež označuje ako premenná triedy, pretože patrí skôr do samotnej triedy než do akejkoľvek konkrétnej inštancie triedy.
Statické premenné sú definované vo vnútri definície triedy, ale mimo definícií akejkoľvek metódy. Zvyčajne sú inicializované hodnotou, rovnako ako premenná inštancie, ale možno k nim pristupovať a upravovať ich prostredníctvom samotnej triedy, a nie prostredníctvom inštancie.
Vlastnosti statických premenných
- Statickým premenným sa pamäť pridelí raz, keď sa objekt pre triedu vytvorí prvýkrát.
- Statické premenné sa vytvárajú mimo metód, ale vo vnútri triedy
- K statickým premenným je možné pristupovať prostredníctvom triedy, ale nie priamo pomocou inštancie.
- Správanie statických premenných sa nemení pre každý objekt.
Prístup Pythonu je jednoduchý; nevyžaduje statické kľúčové slovo.
Poznámka: Všetky premenné, ktorým je priradená hodnota v a deklarácia triedy sú premenné triedy. A premenné že sú priradené hodnoty vnútri metód sú premenné inštancie.
zoznam triediacich polí java
Príklad:
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'> |
>
>Výkon
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Výkon:
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Príklad:
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> |
>
>Výkon
1 2 2>
Vysvetlenie:
v tomto príklade definujeme triedu MyClass, ktorá má statickú premennú static_var inicializovanú na 0. Tiež definujeme premennú inštancie instance_var, ktorá je jedinečná pre každú inštanciu triedy.
Keď vytvoríme inštanciu triedy (obj1), hodnotu statickej premennej inkrementujeme o 1 a priradíme ju k premennej inštancie. Keď vytvoríme ďalšiu inštanciu triedy (obj2), znova inkrementujeme statickú premennú a priradíme novú hodnotu premennej inštancie pre túto inštanciu.
Nakoniec vytlačíme hodnotu statickej premennej pomocou samotnej triedy, a nie inštancie triedy. Ako vidíte, hodnota statickej premennej je zdieľaná medzi všetkými inštanciami triedy a zvyšuje sa vždy, keď sa vytvorí nová inštancia.
Statické premenné môžu byť užitočné na udržiavanie stavu vo všetkých inštanciách triedy alebo na zdieľanie údajov medzi všetkými inštanciami triedy. Je však dôležité používať ich opatrne a zabezpečiť, aby ich hodnoty boli synchronizované so stavom programu, najmä v prostredí s viacerými vláknami.
Výhody:
- Efektívnosť pamäte: Keďže statické premenné sú zdieľané medzi všetkými inštanciami triedy, môžu ušetriť pamäť tým, že sa vyhnú potrebe vytvárať viaceré kópie tých istých údajov. Zdieľaný stav: Statické premenné môžu poskytnúť spôsob, ako udržiavať zdieľaný stav vo všetkých inštanciách triedy, čo umožňuje všetkým inštanciám pristupovať k rovnakým údajom a upravovať ich. Jednoduchý prístup: K statickým premenným je možné pristupovať pomocou samotného názvu triedy bez potreby inštancie triedy. To môže uľahčiť prístup a úpravu údajov uložených v statickej premennej. Inicializácia: Statické premenné je možné inicializovať, keď je trieda definovaná, čo uľahčuje zabezpečenie, že premenná má platnú počiatočnú hodnotu. Čitateľnosť : Statické premenné môžu zlepšiť čitateľnosť kódu, pretože jasne naznačujú, že údaje uložené v premennej sú zdieľané medzi všetkými inštanciami triedy.
Nevýhody:
- Nepružnosť: Statické premenné môžu byť nepružné, pretože ich hodnoty sú zdieľané vo všetkých inštanciách triedy, čo sťažuje rôzne hodnoty pre rôzne inštancie. Skryté závislosti: Statické premenné môžu vytvárať skryté závislosti medzi rôznymi časťami kódu, čo sťažuje pochopenie a úpravu kódu. Bezpečnosť vlákien : Statické premenné môžu byť problematické v prostredí s viacerými vláknami, pretože môžu spôsobiť problémy so súčasnosťou a synchronizáciou, ak nie sú správne synchronizované. Znečistenie menného priestoru: Statické premenné sa môžu pridať do menného priestoru triedy, čo môže spôsobiť konflikty mien a sťažiť údržbu kódu. Testovanie: Statické premenné môžu sťažiť písanie efektívnych jednotkových testov, pretože stav statickej premennej môže ovplyvniť správanie triedy a jej metód.
Celkovo môžu byť statické premenné užitočným nástrojom v programovaní v Pythone, ale mali by sa používať opatrne a mali by sa venovať pozornosť potenciálnym nevýhodám, ako je nepružnosť, skryté závislosti a obavy o bezpečnosť vlákien.