|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 5997
|
[Python] Attributi di classe
Ciao,
studiando Python, arrivato agli attributi di classe, ho letto che se definisco ad esempio: Codice:
class prova(): lista = [0,1] pass A = prova() B = prova() A.lista[0] = 3 Codice:
class prova(): x = 10 pass ![]() Ultima modifica di Unrue : 01-01-2010 alle 14:24. |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Non è esattamente così. Gli attributi che definisci all'interno di una classe sono condivisi da tutte le istanze della medesima.
Il problema sorge quando provi ad assegnargli un valore tramite un'istanza della classe: in questo caso Python crea sempre un nuovo attributo per quell'istanza, ma non modifica l'attributo di classe, che rimane ancora presente (ma non è "visibile" dall'istanza, perché quando vi accedi per primo referenzi sempre quello dell'istanza). Ovviamente se modifichi in qualche modo (SENZA un assegnamento) degli attribuiti di classe che sono mutabili, le modifiche si ripercuotono su tutte le istanze per le quali tale attributo è direttamente visibile. Esempio: Codice:
>>> class c: ... lista = [0, 1] ... x = 10 ... >>> a = c() >>> b = c() >>> a.lista [0, 1] >>> a.lista[0] = 3 >>> a.lista [3, 1] >>> c.lista [3, 1] >>> b.lista [3, 1] >>> a.x 10 >>> a.x = 20 >>> a.x 20 >>> c.x 10 >>> c.x 10 >>> a.lista = [] >>> c.lista [3, 1] >>> a.lista []
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 03:57.