Tots els objectes comparteixen variables de classe o estàtiques. Una instància o variables no estàtiques són diferents per a diferents objectes (cada objecte té una còpia). Per exemple, deixeu que un estudiant d'informàtica estigui representat per una classe CSStudent . La classe pot tenir una variable estàtica el valor de la qual és cse per a tots els objectes. I la classe també pot tenir membres no estàtics com nom i rotllo .
En C++ i Java, podem utilitzar paraules clau estàtiques per convertir una variable en una variable de classe. Les variables que no tenen cap paraula clau estàtica anterior són variables d'instància. Vegeu això per a l'exemple de Java i això per a l'exemple de C++.
Explicació:
A Python, una variable estàtica és una variable que es comparteix entre totes les instàncies d'una classe, en lloc de ser única per a cada instància. De vegades també es coneix com a variable de classe, perquè pertany a la classe mateixa en lloc de qualsevol instància particular de la classe.
Les variables estàtiques es defineixen dins de la definició de classe, però fora de qualsevol definició de mètode. Normalment s'inicien amb un valor, igual que una variable d'instància, però es pot accedir a ells i modificar-los mitjançant la pròpia classe, en lloc d'una instància.
Característiques de les variables estàtiques
- Les variables estàtiques s'assignen memòria una vegada quan es crea l'objecte de la classe per primera vegada.
- Les variables estàtiques es creen fora dels mètodes però dins d'una classe
- Es pot accedir a les variables estàtiques mitjançant una classe, però no directament amb una instància.
- El comportament de les variables estàtiques no canvia per a cada objecte.
L'enfocament de Python és senzill; no requereix cap paraula clau estàtica.
Nota: Totes les variables a les quals se'ls assigna un valor el la declaració de classe són variables de classe. I variables això se'ls assignen valors dins dels mètodes són variables d'instància.
Emojis de poma a Android
Exemple:
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'> |
>
>Sortida
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Sortida:
cse cse Geek Nerd 1 2 cse ece cse ece mech>
Exemple:
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> |
>
>Sortida
1 2 2>
Explicació:
en aquest exemple, definim una classe MyClass que té una variable estàtica static_var inicialitzada a 0. També definim una variable d'instància instance_var que és única per a cada instància de la classe.
Quan creem una instància de la classe (obj1), incrementem el valor de la variable estàtica en 1 i l'assignem a la variable d'instància. Quan creem una altra instància de la classe (obj2), tornem a incrementar la variable estàtica i assignem el nou valor a la variable d'instància per a aquesta instància.
Finalment, imprimim el valor de la variable estàtica utilitzant la classe en si, en lloc d'una instància de la classe. Com podeu veure, el valor de la variable estàtica es comparteix entre totes les instàncies de la classe i s'incrementa cada vegada que es crea una nova instància.
Les variables estàtiques poden ser útils per mantenir l'estat en totes les instàncies d'una classe o per compartir dades entre totes les instàncies d'una classe. Tanmateix, és important utilitzar-los amb cura i assegurar-se que els seus valors estan sincronitzats amb l'estat del programa, especialment en un entorn multiprocés.
Avantatges:
- Eficàcia de la memòria: com que les variables estàtiques es comparteixen entre totes les instàncies d'una classe, poden estalviar memòria evitant la necessitat de crear diverses còpies de les mateixes dades. Estat compartit: les variables estàtiques poden proporcionar una manera de mantenir l'estat compartit en totes les instàncies d'una classe, permetent a totes les instàncies accedir i modificar les mateixes dades. Fàcil accés: es pot accedir a les variables estàtiques mitjançant el propi nom de classe, sense necessitat d'una instància de la classe. Això pot fer que sigui més còmode accedir i modificar les dades emmagatzemades en una variable estàtica. Inicialització: les variables estàtiques es poden inicialitzar quan es defineix la classe, de manera que és fàcil assegurar-se que la variable tingui un valor inicial vàlid. Llegibilitat: Les variables estàtiques poden millorar la llegibilitat del codi, ja que indiquen clarament que les dades emmagatzemades a la variable es comparteixen entre totes les instàncies de la classe.
Desavantatges:
- Inflexibilitat: les variables estàtiques poden ser inflexibles, ja que els seus valors es comparteixen entre totes les instàncies de la classe, cosa que dificulta tenir valors diferents per a instàncies diferents. Dependències ocultes: les variables estàtiques poden crear dependències ocultes entre diferents parts del codi, cosa que dificulta la comprensió i la modificació del codi. Seguretat del fil: les variables estàtiques poden ser problemàtiques en un entorn multifil, ja que poden introduir condicions de carrera i problemes de sincronització si no es sincronitzen correctament. Contaminació de l'espai de noms: les variables estàtiques es poden afegir a l'espai de noms de la classe, causant potencialment conflictes de noms i dificultant el manteniment del codi. Proves: les variables estàtiques poden dificultar l'escriptura de proves unitàries efectives, ja que l'estat de la variable estàtica pot afectar el comportament de la classe i els seus mètodes.
En general, les variables estàtiques poden ser una eina útil en la programació de Python, però s'han d'utilitzar amb cura i atenció als possibles inconvenients, com ara la inflexibilitat, les dependències ocultes i els problemes de seguretat del fil.