[PIPython] Dati statici
Simone Piunno
pioppo
Ven 25 Feb 2005 16:41:32 CET
On Friday 25 February 2005 11:12, Luca Fabbri wrote:
> Provengo dal mondo di programmazione Java.
> Vorrei capire in Python come si definiscono dati (variabili, oggetti)
> statici all'interno di una classe.
> Per i metodi ho trovato staticmethod ma non riesco a trovare
> l'informazione per i dati comuni.
Nel seguito ti risparmio la differenza tra classi classiche e classi newstyle,
che potrai eventualmente approfondire in seguito. Userò solo classi
newstyle.
Prima di tutto in python una classe è anch'essa una istanza, di un'altra
classe, e via così ricorsivamente.
Si può passare da una da un istanza alla relativa classe, attraverso
l'attributo speciale __class__
>>> a=1
>>> a.__class__
<type 'int'>
>>> a.__class__.__class__
<type 'type'>
>>> a.__class__.__class__.__class__
<type 'type'>
per rendere un attributo comune a tutte le istanze di una classe, lo si rende
attributo della classe.
>>> class esempio(object):
... comune = 'valore comune'
... def __init__(self):
... self.noncomune = 'pluto'
... def setcomune(self,val):
... self.__class__.comune = val
... def setnoncomune(self,val):
... self.noncomune = val
... def vedi(self):
... print self.comune
... print self.noncomune
...
>>> es1 = esempio()
>>> es2 = esempio()
>>> es1.setnoncomune('istanza1')
>>> es2.setnoncomune('istanza2')
>>> es1.setcomune('val1')
>>> es2.setcomune('val2')
>>> es1.vedi()
val2
istanza1
>>> es2.vedi()
val2
istanza2
Ora nota come self.comune, in lettura, funzioni anche quando comune è nella
classe, questo a causa della sequenza di fallback che vengono provati durante
la ricerca del nome "comune" applicato al self. Se "comune" non esiste nel
namespace locale dell'istanza, verrà cercato automaticamente nel namespace
della classe. Ma non provare a riassegnare self.comune = qualcosa, perchè
così facendo inseriresti "comune" nel namespace locale dell'istanza,
mascherando il "comune" di classe.
--
Adde parvum parvo magnus acervus erit -- Ovidio
More information about the Python
mailing list