logo

„Python“ klasės arba statiniai kintamieji

Visi objektai turi bendrą klasę arba statinius kintamuosius. Egzempliorius arba nestatiniai kintamieji skirtingiems objektams yra skirtingi (kiekvienas objektas turi kopiją). Pavyzdžiui, leiskite informatikos studentui atstovauti klasei CSS studentas . Klasė gali turėti statinį kintamąjį, kurio reikšmė yra cse visiems objektams. Ir klasėje taip pat gali būti nestatinių narių, tokių kaip vardas ir ritinys .

C++ ir Java galime naudoti statinius raktinius žodžius, kad kintamąjį paverstume klasės kintamuoju. Kintamieji, kurie prieš tai neturi statinio raktinio žodžio, yra egzempliorių kintamieji. Žiūrėkite tai „Java“ pavyzdžiui, o tai – C++ pavyzdžiui.



Paaiškinimas:

Python statinis kintamasis yra kintamasis, kuris yra bendrinamas visiems klasės egzemplioriams, o ne yra unikalus kiekvienam atvejui. Jis taip pat kartais vadinamas klasės kintamuoju, nes jis priklauso pačiai klasei, o ne kokiam nors konkrečiam klasės egzemplioriui.

Statiniai kintamieji apibrėžiami klasės apibrėžime, bet už bet kokių metodų apibrėžimų. Paprastai jie inicijuojami reikšme, kaip ir egzemplioriaus kintamasis, tačiau juos galima pasiekti ir modifikuoti per pačią klasę, o ne per egzempliorių.

Statinių kintamųjų ypatybės

  • Statiniams kintamiesiems atmintis priskiriama vieną kartą, kai klasės objektas sukuriamas pirmą kartą.
  • Statiniai kintamieji sukuriami už metodų ribų, bet klasės viduje
  • Statinius kintamuosius galima pasiekti per klasę, bet ne tiesiogiai naudojant egzempliorių.
  • Statinių kintamųjų elgesys nesikeičia kiekvienam objektui.

Python metodas yra paprastas; tai nereikalauja statinio raktinio žodžio.



Pastaba: Visi kintamieji, kuriems priskiriama reikšmė į klasės deklaracija yra klasės kintamieji. Ir kintamieji kad Metoduose priskiriamos reikšmės yra egzempliorių kintamieji.

rūšiavimo masyvas java

Pavyzdys:

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'>

>

>

Išvestis

cse cse Geek Nerd 1 2 cse ece cse ece mech>

Išvestis:

cse cse Geek Nerd 1 2 cse ece cse ece mech>

Pavyzdys:

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>

>

>

Išvestis

1 2 2>

Paaiškinimas:

Šiame pavyzdyje apibrėžiame klasę MyClass, kurios statinis kintamasis statinis_var inicijuotas į 0. Taip pat apibrėžiame egzemplioriaus kintamąjį instance_var, kuris yra unikalus kiekvienam klasės egzemplioriui.

Kai sukuriame klasės egzempliorių (obj1), statinio kintamojo reikšmę padidiname 1 ir priskiriame jį egzemplioriaus kintamajam. Kai sukuriame kitą klasės egzempliorių (obj2), vėl padidiname statinį kintamąjį ir priskiriame naują reikšmę to egzemplioriaus egzemplioriaus kintamajam.

Galiausiai išspausdiname statinio kintamojo vertę naudodami pačią klasę, o ne klasės egzempliorių. Kaip matote, statinio kintamojo reikšmė yra bendrinama visiems klasės egzemplioriams ir didėja kiekvieną kartą, kai sukuriamas naujas egzempliorius.

Statiniai kintamieji gali būti naudingi norint palaikyti būseną visuose klasės egzemplioriuose arba dalytis duomenimis tarp visų klasės atvejų. Tačiau svarbu jas naudoti atsargiai ir užtikrinti, kad jų vertės būtų sinchronizuotos su programos būsena, ypač daugiagiečio aplinkoje.

Privalumai:

    Atminties efektyvumas: kadangi statiniai kintamieji yra bendrinami visiems klasės atvejams, jie gali sutaupyti atminties, nes nereikia kurti kelių tų pačių duomenų kopijų. Bendrinama būsena: statiniai kintamieji gali būti būdas išlaikyti bendrą būseną visuose klasės egzemplioriuose, leidžiant visiems egzemplioriams pasiekti ir keisti tuos pačius duomenis. Lengva pasiekti: statinius kintamuosius galima pasiekti naudojant patį klasės pavadinimą, nereikia klasės egzemplioriaus. Taip gali būti patogiau pasiekti ir keisti statiniame kintamajame saugomus duomenis. Inicijavimas : statinius kintamuosius galima inicijuoti, kai apibrėžiama klasė, todėl lengva įsitikinti, kad kintamasis turi galiojančią pradinę reikšmę. Skaitomumas : statiniai kintamieji gali pagerinti kodo skaitomumą, nes jie aiškiai rodo, kad kintamajame saugomi duomenys yra bendrinami su visais klasės atvejais.

Trūkumai:

    Nelankstumas : statiniai kintamieji gali būti nelankstūs, nes jų reikšmės yra bendros visuose klasės egzemplioriuose, todėl sunku turėti skirtingas reikšmes skirtingiems atvejams. Paslėptos priklausomybės : statiniai kintamieji gali sukurti paslėptas priklausomybes tarp skirtingų kodo dalių, todėl sunku suprasti ir modifikuoti kodą. Siūlų sauga: statiniai kintamieji gali kelti problemų kelių gijų aplinkoje, nes netinkamai sinchronizuojant jie gali sukelti lenktynių sąlygas ir sinchronizavimo problemas. Vardų erdvės užterštumas : statiniai kintamieji gali papildyti klasės vardų erdvę, todėl gali kilti vardų konfliktų ir apsunkinti kodo priežiūrą. Testavimas: Statiniai kintamieji gali apsunkinti efektyvių vienetų testų rašymą, nes statinio kintamojo būsena gali turėti įtakos klasės ir jos metodų elgsenai.

Apskritai statiniai kintamieji gali būti naudingas Python programavimo įrankis, tačiau juos reikia naudoti atsargiai ir atkreipti dėmesį į galimus neigiamus aspektus, tokius kaip nelankstumas, paslėptos priklausomybės ir gijų saugos problemos.