logo

Razred ali statične spremenljivke v Pythonu

Vsi objekti imajo skupne razredne ali statične spremenljivke. Primerek ali nestatične spremenljivke so različne za različne objekte (vsak objekt ima kopijo). Na primer, naj študenta računalništva predstavlja razred CSStudent . Razred ima lahko statično spremenljivko, katere vrednost je cse za vse objekte. In razred ima lahko tudi nestatične člane, kot je ime in zvitek .

V C++ in Javi lahko uporabimo statične ključne besede, da spremenljivko spremenimo v spremenljivko razreda. Spremenljivke, ki nimajo predhodne statične ključne besede, so spremenljivke primerkov. Glejte to za primer Jave in to za primer C++.



Pojasnilo:

V Pythonu je statična spremenljivka spremenljivka, ki je v skupni rabi med vsemi primerki razreda, namesto da bi bila edinstvena za vsak primerek. Včasih se imenuje tudi spremenljivka razreda, ker pripada samemu razredu in ne kateremu koli posameznemu primerku razreda.

Statične spremenljivke so definirane znotraj definicije razreda, vendar zunaj definicij katere koli metode. Običajno so inicializirani z vrednostjo, tako kot spremenljivka primerka, vendar je do njih mogoče dostopati in jih spreminjati prek samega razreda in ne prek primerka.

Lastnosti statičnih spremenljivk

  • Statičnim spremenljivkam se pomnilnik dodeli enkrat, ko je objekt za razred ustvarjen prvič.
  • Statične spremenljivke so ustvarjene zunaj metod, vendar znotraj razreda
  • Do statičnih spremenljivk je mogoče dostopati prek razreda, vendar ne neposredno z instanco.
  • Obnašanje statičnih spremenljivk se ne spremeni za vsak predmet.

Pristop Python je preprost; ne zahteva statične ključne besede.



Opomba: Vse spremenljivke, ki jim je dodeljena vrednost v the deklaracija razreda so spremenljivke razreda. In spremenljivke to so dodeljene vrednosti znotraj metod so spremenljivke primerkov.

združevanje nizov

primer:

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

>

>

Izhod

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

Izhod:

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

primer:

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>

>

>

Izhod

1 2 2>

Pojasnilo:

v tem primeru definiramo razred MyClass, ki ima statično spremenljivko static_var inicializirano na 0. Prav tako definiramo spremenljivko primerka instance_var, ki je edinstvena za vsak primerek razreda.

Ko ustvarimo primerek razreda (obj1), povečamo vrednost statične spremenljivke za 1 in jo dodelimo spremenljivki primerka. Ko ustvarimo drug primerek razreda (obj2), ponovno povečamo statično spremenljivko in dodelimo novo vrednost spremenljivki primerka za ta primerek.

Na koncu izpišemo vrednost statične spremenljivke s samim razredom in ne z instanco razreda. Kot lahko vidite, je vrednost statične spremenljivke v skupni rabi med vsemi primerki razreda in se poveča vsakič, ko je ustvarjen nov primerek.

Statične spremenljivke so lahko uporabne za vzdrževanje stanja v vseh primerkih razreda ali za skupno rabo podatkov med vsemi primerki razreda. Vendar je pomembno, da jih uporabljate previdno in zagotovite, da so njihove vrednosti sinhronizirane s stanjem programa, zlasti v večnitnem okolju.

Prednosti:

    Učinkovitost pomnilnika : ker si statične spremenljivke delijo vsi primerki razreda, lahko prihranijo pomnilnik tako, da se izognejo potrebi po ustvarjanju več kopij istih podatkov. Stanje v skupni rabi: statične spremenljivke lahko zagotovijo način za vzdrževanje stanja v skupni rabi v vseh primerkih razreda, kar vsem primerkom omogoča dostop do istih podatkov in njihovo spreminjanje. Enostaven dostop: do statičnih spremenljivk je mogoče dostopati s samim imenom razreda, ne da bi potrebovali primerek razreda. To lahko olajša dostop in spreminjanje podatkov, shranjenih v statični spremenljivki. Inicializacija: statične spremenljivke je mogoče inicializirati, ko je razred definiran, kar olajša zagotavljanje, da ima spremenljivka veljavno začetno vrednost. Berljivost : statične spremenljivke lahko izboljšajo berljivost kode, saj jasno kažejo, da so podatki, shranjeni v spremenljivki, v skupni rabi med vsemi primerki razreda.

Slabosti:

    Nefleksibilnost : statične spremenljivke so lahko neprilagodljive, saj so njihove vrednosti skupne vsem primerkom razreda, zaradi česar je težko imeti različne vrednosti za različne primerke. Skrite odvisnosti : statične spremenljivke lahko ustvarijo skrite odvisnosti med različnimi deli kode, kar oteži razumevanje in spreminjanje kode. Varnost niti: statične spremenljivke so lahko problematične v večnitnem okolju, saj lahko povzročijo pogoje tekmovanja in težave s sinhronizacijo, če niso pravilno sinhronizirane. Onesnaževanje imenskega prostora: statične spremenljivke lahko dodajo imenskemu prostoru razreda, kar lahko povzroči konflikte imen in oteži vzdrževanje kode. Testiranje: statične spremenljivke lahko otežijo pisanje učinkovitih testov enote, saj lahko stanje statične spremenljivke vpliva na vedenje razreda in njegovih metod.

Na splošno so statične spremenljivke lahko uporabno orodje pri programiranju Python, vendar jih je treba uporabljati previdno in upoštevati morebitne slabosti, kot so neprilagodljivost, skrite odvisnosti in pomisleki glede varnosti niti.