[PIPython] Membri di classe e membri di oggetto (lungo)

Luca Fabbri lucafbb
Mer 30 Mar 2005 14:20:33 CEST


Come non detto!

Non mi ero accorto che qualcun altro aveva risposto al mio vecchio
post dopo la mia ultima visita...

Là è tutto ben spiegato... Grazie comunque...

PS: La storia del link al manuale però è sempre valida!

Saluti


On Wed, 30 Mar 2005 13:52:23 +0200, Luca Fabbri <lucafbb a gmail.com> wrote:
> Per chi ne ha voglia...
> 
> Scusate, sto sviluppando alcune applicazioni in un ambiente che
> sfrutta python in modo indiretto, senza però avere grosse conoscenze
> di python stesso né un libro di testo che posso definire molto
> buono...
> 
> Qualche tempo fa avevo postato una domanda su come definire tipi di
> dato statici in python. Proveniendo dalla programmazione Java, per
> tali tipi di dato intendo variabili interni ad una classe (e.g: classe
> MyClass), accessibili da tutti gli oggetti istanza di questa classe (a
> = MyClass(); b= MyClass()...) ma che siano unici (diciamo di avere
> quindi una variabile intera "mycostante = 5").
> Con questo intendo soprattutto che la modifica di questa variabile,
> comunque venga fatta, sia quindi visibile immediatamente a tutti gli
> oggetti in quanto la variabile mycostante è unica.
> 
> Qualcuno mi aveva risposto e la soluzione era ok, per quanto dal punto
> di vista della programmazione ad oggetti non mi soddisfaceva.
> Per quanto sia un gran tifoso di Java e mi piaccia molto come
> linguaggio, sempre più persone mi dicono che python è davvero molto
> meglio per tantissimi aspetti, eppure la soluzione che ho adottato non
> rispettava esattamente l'dea di membro di classe statico che mi era
> tanto chiara in Java e che trovavo molto semplice...
> 
> Ok, questo è solo un lungo preambolo!
> 
> Oggi però mi sono accorto di qualcosa di nuovo:
> 
> Fino ad oggi, scrivendo qualcosa del genere...
> 
> class MyClass:
>   myvariabile = 5
>   ...
> 
> ...credevo di non aver fatto altro che definire un normale membro
> della classe, ossia generando poi questo codice:
> 
> a = MyClass()
> b = MyClass()
> 
> a e b sono due istanze con due distinti membri chiamati myvariabile;
> modificando a.myvariabile, b.myvariabile rimane al valore iniziale.
> 
> Per puro caso oggi mi sono accorto che invece pare che tutte le
> istanze di MyClass condividano la stessa area di memoria di
> myvariabile, ossia se modifico a.myclass, lo stesso valore sarà
> accessibile con b.myclass...
> 
> A parte l'infarto che quasi mi prendeva per il non aver capito nulla
> di come stanno le cose, ho ripreso in mano quella tristezza di libro
> che ho e mi sono accorto che per definire membri della classe
> "normali", ossia col comportamento che mi aspettavo, viene utilizzato:
> 
> def __init__(self, id, **kwargs):
>   ...
>   self.myvariabile = 5
>   ...
> 
> Senza che myvariabile sia definita da qualsiasi altra parte
> all'interno della classe...
> A questo punto credo che l'altra volta abbia postato una richiesta che
> chi è stato tanto gentile da analizzare non abbia capito in quanto
> potrei essermi spiegato piuttosto male (o io non ho capito le
> risposte?!?) e di certo l'equivoco è che fin'ora ho scritto oggetti
> come li avrei scritti in Java...
> 
> Ora però ho bisogno di qualche certezza, non vorrei aver preso un
> altro abbaglio:
> 
> 1) Definendo self.myvariabile dentro ad __init__, ho effettivamente
> creato una variabile interna all'istanza dell'oggetto e che quindi il
> valore di questa viene memorizzata nell'area di memoria dell'oggetto?
> 
> 2) Definendo myvariabile dentro al corpo principale della classe,
> questa è diventata una variabile di classe, la cui esistenza è unica?
> 
> Ringrazio anticipatamente tutti quelli che hanno la pazienza di rispondermi...
> 
> PS: Nessuno ha per caso un link da inviarmi per un buon manuale su web
> da leggere? Premetto che la documentazione trovata sotto python.org
> (es: il tutorial) non l'ho affatto trovata buona o completa.
> 
> Saluti.
>


More information about the Python mailing list