Toate obiectele partajează variabile de clasă sau statice. O instanță sau variabilele non-statice sunt diferite pentru diferite obiecte (fiecare obiect are o copie). De exemplu, un student la informatică să fie reprezentat de o clasă CSStudent . Clasa poate avea o variabilă statică a cărei valoare este cse pentru toate obiectele. Și clasa poate avea, de asemenea, membri non-statici, cum ar fi Nume și rostogolire .
În C++ și Java, putem folosi cuvinte cheie statice pentru a face din variabilă o variabilă de clasă. Variabilele care nu au un cuvânt cheie static anterior sunt variabile de instanță. Vedeți asta pentru exemplul Java și acesta pentru exemplul C++.
Explicaţie:
În Python, o variabilă statică este o variabilă care este partajată între toate instanțele unei clase, mai degrabă decât să fie unică pentru fiecare instanță. De asemenea, uneori este denumită o variabilă de clasă, deoarece aparține clasei în sine și nu oricărei instanțe particulare a clasei.
Variabilele statice sunt definite în interiorul definiției clasei, dar în afara oricărei definiții de metodă. Ele sunt de obicei inițializate cu o valoare, la fel ca o variabilă de instanță, dar pot fi accesate și modificate prin clasa în sine, mai degrabă decât printr-o instanță.
Caracteristicile variabilelor statice
- Variabilelor statice li se alocă memorie o dată când obiectul pentru clasă este creat pentru prima dată.
- Variabilele statice sunt create în afara metodelor, dar în interiorul unei clase
- Variabilele statice pot fi accesate printr-o clasă, dar nu direct cu o instanță.
- Comportamentul variabilelor statice nu se schimbă pentru fiecare obiect.
Abordarea Python este simplă; nu necesită un cuvânt cheie static.
Notă: Toate variabilele cărora li se atribuie o valoare în cel declarația de clasă sunt variabile de clasă. Și variabile acea sunt atribuite valori în interiorul metodelor sunt variabile de instanță.
Linux rulează cmd
Exemplu:
Piton
# 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'> |
>
>Ieșire
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Ieșire:
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Exemplu:
Piton
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> |
>
>Ieșire
1 2 2>
Explicaţie:
în acest exemplu, definim o clasă MyClass care are o variabilă statică static_var inițializată la 0. De asemenea, definim o variabilă de instanță instance_var care este unică pentru fiecare instanță a clasei.
Când creăm o instanță a clasei (obj1), incrementăm valoarea variabilei statice cu 1 și o atribuim variabilei de instanță. Când creăm o altă instanță a clasei (obj2), incrementăm din nou variabila statică și atribuim noua valoare variabilei de instanță pentru acea instanță.
În cele din urmă, imprimăm valoarea variabilei statice folosind clasa în sine, mai degrabă decât o instanță a clasei. După cum puteți vedea, valoarea variabilei statice este împărțită între toate instanțele clasei și este incrementată de fiecare dată când este creată o instanță nouă.
Variabilele statice pot fi utile pentru menținerea stării în toate instanțele unei clase sau pentru partajarea datelor între toate instanțele unei clase. Cu toate acestea, este important să le folosiți cu atenție și să vă asigurați că valorile lor sunt sincronizate cu starea programului, în special într-un mediu cu mai multe fire.
Avantaje:
- Eficiența memoriei: Deoarece variabilele statice sunt partajate între toate instanțele unei clase, ele pot economisi memorie evitând necesitatea de a crea mai multe copii ale acelorași date. Stare partajată: variabilele statice pot oferi o modalitate de a menține starea partajată în toate instanțele unei clase, permițând tuturor instanțelor să acceseze și să modifice aceleași date. Ușor de accesat: variabilele statice pot fi accesate folosind numele clasei în sine, fără a fi nevoie de o instanță a clasei. Acest lucru poate face mai convenabil accesarea și modificarea datelor stocate într-o variabilă statică. Inițializare: Variabilele statice pot fi inițializate atunci când clasa este definită, facilitând asigurarea că variabila are o valoare de pornire validă. Lizibilitate: Variabilele statice pot îmbunătăți lizibilitatea codului, deoarece indică în mod clar că datele stocate în variabilă sunt partajate între toate instanțele clasei.
Dezavantaje:
- Inflexibilitate: variabilele statice pot fi inflexibile, deoarece valorile lor sunt împărtășite în toate instanțele clasei, ceea ce face dificilă existența unor valori diferite pentru diferite instanțe. Dependențe ascunse: variabilele statice pot crea dependențe ascunse între diferite părți ale codului, ceea ce face dificilă înțelegerea și modificarea codului. Siguranța firelor: variabilele statice pot fi problematice într-un mediu cu mai multe fire, deoarece pot introduce condiții de cursă și probleme de sincronizare dacă nu sunt sincronizate corect. Poluarea spațiului de nume: variabilele statice se pot adăuga la spațiul de nume al clasei, provocând potențial conflicte de nume și făcând mai dificilă menținerea codului. Testare: Variabilele statice pot face mai dificilă scrierea de teste unitare eficiente, deoarece starea variabilei statice poate afecta comportamentul clasei și metodele acesteia.
În general, variabilele statice pot fi un instrument util în programarea Python, dar ar trebui să fie utilizate cu grijă și atenție la potențialele dezavantaje, cum ar fi inflexibilitatea, dependențele ascunse și problemele legate de siguranța firelor.