logo

Variabili di classe o statiche in Python

Tutti gli oggetti condividono variabili di classe o statiche. Un'istanza o variabili non statiche sono diverse per oggetti diversi (ogni oggetto ha una copia). Ad esempio, supponiamo che uno studente di informatica sia rappresentato da una classe CSStudent . La classe può avere una variabile statica il cui valore è cse per tutti gli oggetti. E la classe può anche avere membri non statici come nome E rotolo .

In C++ e Java, possiamo utilizzare parole chiave statiche per rendere una variabile una variabile di classe. Le variabili che non hanno una parola chiave statica precedente sono variabili di istanza. Vedi questo per l'esempio Java e questo per l'esempio C++.

Spiegazione:

In Python, una variabile statica è una variabile condivisa tra tutte le istanze di una classe, anziché essere univoca per ciascuna istanza. A volte viene anche chiamata variabile di classe, perché appartiene alla classe stessa piuttosto che a qualsiasi istanza particolare della classe.



Le variabili statiche sono definite all'interno della definizione della classe, ma all'esterno di qualsiasi definizione del metodo. In genere vengono inizializzati con un valore, proprio come una variabile di istanza, ma è possibile accedervi e modificarli tramite la classe stessa, anziché tramite un'istanza.

Caratteristiche delle variabili statiche

  • Alle variabili statiche viene allocata memoria una volta quando l'oggetto per la classe viene creato per la prima volta.
  • Le variabili statiche vengono create all'esterno dei metodi ma all'interno di una classe
  • È possibile accedere alle variabili statiche tramite una classe ma non direttamente con un'istanza.
  • Il comportamento delle variabili statiche non cambia per ogni oggetto.

L'approccio Python è semplice; non richiede una parola chiave statica.

Nota: Tutte le variabili a cui è assegnato un valore in IL dichiarazione di classe sono variabili di classe. E variabili Quello vengono assegnati valori all'interno dei metodi sono variabili di istanza.

I comandi Linux creano la cartella

Esempio:

Pitone




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

>

>

Produzione

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

Produzione:

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

Esempio:

Pitone




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>

>

>

Produzione

1 2 2>

Spiegazione:

in questo esempio, definiamo una classe MyClass che ha una variabile statica static_var inizializzata su 0. Definiamo anche una variabile di istanza example_var che è univoca per ciascuna istanza della classe.

Quando creiamo un'istanza della classe (obj1), incrementiamo il valore della variabile statica di 1 e lo assegniamo alla variabile di istanza. Quando creiamo un'altra istanza della classe (obj2), incrementiamo nuovamente la variabile statica e assegniamo il nuovo valore alla variabile di istanza per quell'istanza.

Infine, stampiamo il valore della variabile statica utilizzando la classe stessa, anziché un'istanza della classe. Come puoi vedere, il valore della variabile statica è condiviso tra tutte le istanze della classe e viene incrementato ogni volta che viene creata una nuova istanza.

Le variabili statiche possono essere utili per mantenere lo stato in tutte le istanze di una classe o per condividere dati tra tutte le istanze di una classe. Tuttavia, è importante usarli con attenzione e garantire che i loro valori siano sincronizzati con lo stato del programma, soprattutto in un ambiente multithread.

Vantaggi:

    Efficienza della memoria: poiché le variabili statiche sono condivise tra tutte le istanze di una classe, possono risparmiare memoria evitando la necessità di creare più copie degli stessi dati. Stato condiviso: le variabili statiche possono fornire un modo per mantenere lo stato condiviso tra tutte le istanze di una classe, consentendo a tutte le istanze di accedere e modificare gli stessi dati. Facile accesso: è possibile accedere alle variabili statiche utilizzando il nome della classe stessa, senza bisogno di un'istanza della classe. Ciò può rendere più comodo l'accesso e la modifica dei dati archiviati in una variabile statica. Inizializzazione: le variabili statiche possono essere inizializzate quando la classe viene definita, semplificando il controllo che la variabile abbia un valore iniziale valido. Leggibilità: le variabili statiche possono migliorare la leggibilità del codice, poiché indicano chiaramente che i dati memorizzati nella variabile sono condivisi tra tutte le istanze della classe.

Svantaggi:

    Inflessibilità: le variabili statiche possono essere inflessibili, poiché i loro valori sono condivisi tra tutte le istanze della classe, rendendo difficile avere valori diversi per istanze diverse. Dipendenze nascoste: le variabili statiche possono creare dipendenze nascoste tra diverse parti del codice, rendendo difficile la comprensione e la modifica del codice. Sicurezza dei thread: le variabili statiche possono essere problematiche in un ambiente multithread, poiché possono introdurre condizioni di competizione e problemi di sincronizzazione se non sincronizzate correttamente. Inquinamento dello spazio dei nomi: le variabili statiche possono aggiungersi allo spazio dei nomi della classe, causando potenzialmente conflitti di nomi e rendendo più difficile la manutenzione del codice. Test: le variabili statiche possono rendere più difficile la scrittura di unit test efficaci, poiché lo stato della variabile statica può influenzare il comportamento della classe e dei suoi metodi.

Nel complesso, le variabili statiche possono essere uno strumento utile nella programmazione Python, ma dovrebbero essere utilizzate con cura e attenzione ai potenziali svantaggi, come inflessibilità, dipendenze nascoste e problemi di sicurezza dei thread.