2013-05-12 20 views
6

Sto imparando classi Python per conto mio in questo momento e mi sono imbattuto in questa pagina:Variabili pubbliche nelle classi Python?

http://www.tutorialspoint.com/python/python_classes_objects.htm

La variabile empCount è una variabile di classe il cui valore sarebbe condivisa tra tutte le istanze di una classe. Si può accedere come Employee.empCount dall'interno della classe o fuori dalla classe.

Suppongo che si chiami una variabile pubblica? O una variabile pubblica statica?

Questa tecnica è buona pratica? So che questa domanda è un po 'soft, ma in generale quando è meglio avere una variabile di classe come self.var (dichiarata nell'iniz o qualcosa del genere) rispetto a una variabile pubblica come questa?

+0

Si chiama semplicemente attributo di classe. Sono equivalenti ai membri di dati statici di C++. –

risposta

5

Si chiama un attributo di classe. Python non fa distinzioni tra pubblico e privato; la privacy è indicata solo per convenzione e non viene applicata.

È tecnicamente consigliabile se è necessario condividere i dati tra le istanze. Ricorda, i metodi sono anche attributi di classe!

+0

Quindi, se il mio programma era tutto ciò che riguarda la connessione a un'API remota e l'inserimento di dati, avrebbe senso memorizzare l'URL come "attributo di classe" o come variabile self.URL (mi spiace non so come li chiami) –

+0

Attributi di istanza - no , non proprio. Utilizza gli attributi di classe come valori predefiniti (impostando lo stesso nome sull'istanza maschera l'attributo class), per lo stato che deve essere condiviso tra tutte le istanze o i dati che devi modificare quando si creano nuove istanze (come un contatore per generare ID univoci per istanza). –

1

La differenza è, se la variabile è dichiarata all'interno del costruttore __init__, la variabile è diversa per le diverse variabili di classe. (es.) Se ci sono due oggetti per la classe, ognuno ha uno spazio di memoria diverso per questa variabile. Se è dichiarato come questo empcount, lo stesso spazio di memoria è condiviso o accessibile da tutti gli oggetti della classe. In questo caso, ogni oggetto creato aumenta il valore di empcount di 1. Pertanto, quando una variabile deve essere condivisa da tutti gli oggetti, utilizzare questo tipo di dichiarazione statica. Ma il passaggio a questa variabile influisce su tutti gli oggetti della classe.

+0

Quindi, anche se molti oggetti possono essere istanziati e empcount = 0 nella classe, vengono inizializzati solo a 0 la prima volta che la classe viene istanziata (e quindi aumentata di 1 tramite init)? –

+0

sì. Ogni volta che viene chiamato il costruttore, il valore empcount viene aumentato di uno, quindi il valore 'empcount' dà il numero di oggetti della classe .. –

+0

Come detto, questo equivale all'inizializzazione di variabili statiche in c –

Problemi correlati