logo

Luokka- tai staattiset muuttujat Pythonissa

Kaikki objektit jakavat luokan tai staattiset muuttujat. Ilmentymä tai ei-staattiset muuttujat ovat erilaisia ​​eri objekteille (jokaisella objektilla on kopio). Esimerkiksi tietojenkäsittelytieteen opiskelijaa voi edustaa luokka CSS-opiskelija . Luokassa voi olla staattinen muuttuja, jonka arvo on cse kaikille objekteille. Ja luokassa voi olla myös ei-staattisia jäseniä, kuten nimi ja rullaa .

C++:ssa ja Javassa voimme käyttää staattisia avainsanoja tehdäksemme muuttujasta luokkamuuttujan. Muuttujat, joilla ei ole edeltävää staattista avainsanaa, ovat ilmentymämuuttujia. Katso tämä Java-esimerkille ja tämä C++-esimerkille.



Selitys:

Pythonissa staattinen muuttuja on muuttuja, joka jaetaan luokan kaikkien esiintymien kesken sen sijaan, että se olisi ainutlaatuinen jokaiselle esiintymälle. Sitä kutsutaan joskus myös luokkamuuttujaksi, koska se kuuluu itse luokkaan eikä luokan mihinkään tiettyyn esiintymään.

Staattiset muuttujat määritellään luokkamääritelmän sisällä, mutta kaikkien menetelmämääritelmien ulkopuolella. Ne on tyypillisesti alustettu arvolla, aivan kuten ilmentymämuuttuja, mutta niitä voidaan käyttää ja muokata itse luokan kautta ilmentymän sijaan.

Staattisten muuttujien ominaisuudet

  • Staattisille muuttujille varataan muisti kerran, kun luokan objekti luodaan ensimmäistä kertaa.
  • Staattiset muuttujat luodaan menetelmien ulkopuolella, mutta luokan sisällä
  • Staattisia muuttujia voidaan käyttää luokan kautta, mutta ei suoraan ilmentymän kautta.
  • Staattisten muuttujien käyttäytyminen ei muutu jokaisen objektin kohdalla.

Python-lähestymistapa on yksinkertainen; se ei vaadi staattista avainsanaa.



Huomautus: Kaikki muuttujat, joille on määritetty arvo the luokkailmoitukset ovat luokkamuuttujia. Ja muuttujat että Metodeissa määritetyt arvot ovat ilmentymämuuttujia.

kuinka tarkistaa näytön koko

Esimerkki:

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

>

>

Lähtö

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

Lähtö:

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

Esimerkki:

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>

>

>

Lähtö

1 2 2>

Selitys:

Tässä esimerkissä määrittelemme luokan MyClass, jonka staattinen muuttuja static_var on alustettu arvoon 0. Määrittelemme myös ilmentymämuuttujan instance_var, joka on ainutlaatuinen luokan jokaiselle esiintymälle.

Kun luomme luokan (obj1) esiintymän, lisäämme staattisen muuttujan arvoa yhdellä ja määritämme sen ilmentymämuuttujalle. Kun luomme luokan toisen esiintymän (obj2), lisäämme staattista muuttujaa uudelleen ja annamme uuden arvon kyseisen ilmentymän ilmentymämuuttujalle.

Lopuksi tulostamme staattisen muuttujan arvon käyttämällä itse luokkaa luokan esiintymän sijaan. Kuten näet, staattisen muuttujan arvo jaetaan kaikkien luokan esiintymien kesken, ja sitä kasvatetaan aina, kun uusi ilmentymä luodaan.

Staattiset muuttujat voivat olla hyödyllisiä tilan ylläpitämisessä luokan kaikissa esiintymissä tai tietojen jakamiseen luokan kaikkien esiintymien kesken. On kuitenkin tärkeää käyttää niitä huolellisesti ja varmistaa, että niiden arvot synkronoidaan ohjelman tilan kanssa, erityisesti monisäikeisessä ympäristössä.

Edut:

    Muistin tehokkuus: Koska staattiset muuttujat jaetaan luokan kaikkien esiintymien kesken, ne voivat säästää muistia välttämällä tarvetta luoda useita kopioita samoista tiedoista. Jaettu tila: Staattiset muuttujat voivat tarjota tavan ylläpitää jaettua tilaa luokan kaikissa esiintymissä, jolloin kaikki esiintymät voivat käyttää ja muokata samoja tietoja. Helppokäyttöinen: Staattisia muuttujia voidaan käyttää käyttämällä itse luokan nimeä ilman luokan esiintymää. Tämä voi helpottaa staattiseen muuttujaan tallennettujen tietojen käyttöä ja muokkaamista. Alustus: Staattiset muuttujat voidaan alustaa, kun luokka määritellään, jolloin on helppo varmistaa, että muuttujalla on kelvollinen aloitusarvo. Luettavuus: Staattiset muuttujat voivat parantaa koodin luettavuutta, koska ne osoittavat selvästi, että muuttujaan tallennetut tiedot jaetaan kaikkien luokan esiintymien kesken.

Haitat:

    Joustamattomuus: Staattiset muuttujat voivat olla joustamattomia, koska niiden arvot ovat jaetut luokan kaikissa esiintymissä, mikä vaikeuttaa erilaisten arvojen saamista eri instansseille. Piilotetut riippuvuudet: Staattiset muuttujat voivat luoda piilotettuja riippuvuuksia koodin eri osien välille, mikä vaikeuttaa koodin ymmärtämistä ja muokkaamista. Säikeen turvallisuus: Staattiset muuttujat voivat olla ongelmallisia monisäikeisessä ympäristössä, koska ne voivat aiheuttaa kilpailuolosuhteita ja synkronointiongelmia, jos niitä ei synkronoida oikein. Nimitilan saastuminen: Staattiset muuttujat voivat lisätä luokan nimiavaruutta, mikä voi aiheuttaa nimiristiriitoja ja vaikeuttaa koodin ylläpitoa. Testaus: Staattiset muuttujat voivat vaikeuttaa tehokkaiden yksikkötestien kirjoittamista, koska staattisen muuttujan tila voi vaikuttaa luokan ja sen menetelmien käyttäytymiseen.

Kaiken kaikkiaan staattiset muuttujat voivat olla hyödyllinen työkalu Python-ohjelmoinnissa, mutta niitä tulee käyttää varoen ja huomioimalla mahdolliset haittapuolet, kuten joustamattomuus, piilotetut riippuvuudet ja säikeen turvallisuusongelmat.