Alle objekter deler klasse eller statiske variabler. En forekomst eller ikke-statiske variabler er forskjellige for forskjellige objekter (hvert objekt har en kopi). La for eksempel en informatikkstudent bli representert av en klasse CSS-student . Klassen kan ha en statisk variabel hvis verdi er cse for alle objekter. Og klassen kan også ha ikke-statiske medlemmer som Navn og rull .
I C++ og Java kan vi bruke statiske nøkkelord for å gjøre en variabel til en klassevariabel. Variablene som ikke har et foregående statisk nøkkelord, er forekomstvariabler. Se dette for Java-eksemplet og dette for C++-eksemplet.
Forklaring:
I Python er en statisk variabel en variabel som deles mellom alle forekomster av en klasse, i stedet for å være unik for hver forekomst. Det er også noen ganger referert til som en klassevariabel, fordi den tilhører selve klassen i stedet for noen spesiell forekomst av klassen.
Statiske variabler er definert i klassedefinisjonen, men utenfor alle metodedefinisjoner. De initialiseres vanligvis med en verdi, akkurat som en forekomstvariabel, men de kan nås og endres gjennom selve klassen, i stedet for gjennom en forekomst.
Funksjoner av statiske variabler
- Statiske variabler tildeles minne én gang når objektet for klassen opprettes for første gang.
- Statiske variabler lages utenfor metoder, men inne i en klasse
- Statiske variabler kan nås gjennom en klasse, men ikke direkte med en forekomst.
- Statiske variablers oppførsel endres ikke for hvert objekt.
Python-tilnærmingen er enkel; det krever ikke et statisk nøkkelord.
Merk: Alle variabler som er tildelt en verdi i de klasseerklæring er klassevariabler. Og variabler at er tildelt verdier inne i metoder er instansvariabler.
ascii av a i java
Eksempel:
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'> |
>
>Produksjon
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Produksjon:
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Eksempel:
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> |
>
>Produksjon
1 2 2>
Forklaring:
i dette eksemplet definerer vi en klasse MyClass som har en statisk variabel static_var initialisert til 0. Vi definerer også en forekomstvariabel instance_var som er unik for hver forekomst av klassen.
Når vi oppretter en forekomst av klassen (obj1), øker vi verdien til den statiske variabelen med 1 og tilordner den til forekomstvariabelen. Når vi oppretter en annen forekomst av klassen (obj2), øker vi den statiske variabelen igjen og tildeler den nye verdien til forekomstvariabelen for den forekomsten.
Til slutt skriver vi ut verdien av den statiske variabelen ved å bruke selve klassen, i stedet for en forekomst av klassen. Som du kan se, deles verdien av den statiske variabelen mellom alle forekomster av klassen, og den økes hver gang en ny forekomst opprettes.
Statiske variabler kan være nyttige for å opprettholde tilstand på tvers av alle forekomster av en klasse, eller for å dele data mellom alle forekomster av en klasse. Det er imidlertid viktig å bruke dem forsiktig og sikre at verdiene deres er synkronisert med statusen til programmet, spesielt i et flertrådsmiljø.
Fordeler:
- Minneeffektivitet: Siden statiske variabler deles mellom alle forekomster av en klasse, kan de spare minne ved å unngå behovet for å lage flere kopier av de samme dataene. Delt tilstand: Statiske variabler kan gi en måte å opprettholde delt tilstand på tvers av alle forekomster av en klasse, slik at alle forekomster kan få tilgang til og endre de samme dataene. Enkel tilgang: Statiske variabler kan nås ved å bruke selve klassenavnet, uten å trenge en forekomst av klassen. Dette kan gjøre det mer praktisk å få tilgang til og endre dataene som er lagret i en statisk variabel. Initialisering : Statiske variabler kan initialiseres når klassen er definert, noe som gjør det enkelt å sikre at variabelen har en gyldig startverdi. Lesbarhet : Statiske variabler kan forbedre lesbarheten til koden, da de tydelig indikerer at dataene som er lagret i variabelen deles mellom alle forekomster av klassen.
Ulemper:
- Ufleksibilitet : Statiske variabler kan være lite fleksible, siden verdiene deres deles på tvers av alle forekomster av klassen, noe som gjør det vanskelig å ha forskjellige verdier for forskjellige forekomster. Skjulte avhengigheter : Statiske variabler kan skape skjulte avhengigheter mellom ulike deler av koden, noe som gjør det vanskelig å forstå og endre koden. Trådsikkerhet: Statiske variabler kan være problematiske i et flertrådsmiljø, siden de kan introdusere løpsforhold og synkroniseringsproblemer hvis de ikke synkroniseres riktig. Navneområdeforurensning: Statiske variabler kan legge til navneområdet til klassen, potensielt forårsake navnekonflikter og gjøre det vanskeligere å vedlikeholde koden. Testing: Statiske variabler kan gjøre det vanskeligere å skrive effektive enhetstester, da tilstanden til den statiske variabelen kan påvirke oppførselen til klassen og dens metoder.
Totalt sett kan statiske variabler være et nyttig verktøy i Python-programmering, men de bør brukes med forsiktighet og oppmerksomhet på potensielle ulemper, som ufleksibilitet, skjulte avhengigheter og bekymringer om trådsikkerhet.