[PIPython] Membri di classe e membri di oggetto (lungo)
Andrea Giammarchi
andrea
Mer 30 Mar 2005 14:44:55 CEST
Luca Fabbri wrote:
>Per chi ne ha voglia...
>
>
Incuriosito da questa discussione ho appena fatto un file di prova,
molto semplice e spero utile per scharirti le idee su cme Python
"gestisce in modo dinamico se stesso" ... se ci sono caXXate, vi
pregherei di spiegare anche a me cosa c'e' che non va o cosa c'e' di
preciso dietro questo comportamento.
Grazie,
Andrea Giammarchi
________________________________________________________
# TEST PER VARIABILI STATICHE DINAMICHE PRIVATE PUBBLICHE DI OGGETTI E
CLASSI
# COPIARE ED INCOLLARE PER IL TEST, LEGGERE PER CAPIRCI DI PIU' ....
SPERO ...
class MyClass:
# variabili statiche, private e pubbliche
globale_statica = 5;
__privata_statica = 5;
# costruttore
def __init__( self ):
self.interna_dinamica = 5;
self.__privata_dinamica = 5;
# metodo pubblico per prelevare la privata statica
def getPrivataStatica( self ):
return MyClass.__privata_statica
# metodo pubblico per settare la privata statica
def setPrivataStatica( self, number ):
MyClass.__privata_statica = number
# metodo pubblico per prelevare la privata dinamica
def getPrivataDinamica( self ):
return self.__privata_dinamica
# metodo pubblico per settare la privata dinamica
def setPrivataDinamica( self, number ):
self.__privata_dinamica = number
# ISTANZIO OGGETTO a ED OGGETTO b
a = MyClass()
b = MyClass()
# STAMPO TUTTE LE VARIABILI DI A
print a.globale_statica # sara' 5
# print a.__privata_statica => errore
print a.getPrivataStatica() # sara' 5
print a.interna_dinamica # sara' 5
# print a.__privata_dinamica => errore
print a.getPrivataDinamica() # sara' 5
# STAMPO TUTTE LE VARIABILI DI B
print a.globale_statica # sara' 5
print a.getPrivataStatica() # sara' 5
print a.interna_dinamica # sara' 5
print a.getPrivataDinamica() # sara' 5
# SETTO LA STATICA PUBBLICA DI MyClass
MyClass.globale_statica = 7
# a E b adesso hanno la globale_statica della classe a 7 ...
# CONTROLLO SIA a CHE b ( entrambi avranno 7 )
print a.globale_statica # sara' 7
print b.globale_statica # sara' 7
# SETTO LA PRIVATA STATICA TRAMITE L' OGGETTO a
# ( non si puo' tramite MyClass.__privata_statica = ... e' privata )
a.setPrivataStatica( 11 )
# definiamo tramite il metodo di a la statica privata di MyClass ...
# CONTROLLO SE LA VARIABILE STATICA SETTATA TRAMITE a
# SIA EFFETTIVAMENTE STATICA NELLA CLASSE ( tramite print su b )
print b.getPrivataStatica() # sara' 11
# SETTO SU b LA SUA INTERNA DINAMICA
b.setPrivataDinamica( 13 )
# cambiamo valore a quella interna dinamica ...
# CONTROLLO SU a ...
print a.getPrivataDinamica() # invariato, sara' 5
# E MI ACCERTO PER b ...
print b.getPrivataDinamica() # ovviamente sara' 13
# CAMBIO SU a LA DINAMICA PUBBLICA
a.interna_dinamica = 21
# E CONTROLLO SU ENTRAMBI ...
print a.interna_dinamica # sara' 21, l' abbiamo appena assegnato
print b.interna_dinamica # sara' 5, nessun cambiamento per l' oggetto b
# SETTO UN' ULTIMA VOLTA LA STATICA GLOBALE SU b
b.globale_statica = 51 # attenzione ...
# abbiamo appena detto a b di fregarsene della statica globale
# e di 'appropriarsi' della variabile globale_statica
# che a questo punto avra' un riferimento all' oggetto
# e non alla classe ...
# E CONTROLLO SU a E b
print a.globale_statica # come prima, 7
print b.globale_statica # come assegnato, 51
# ma se era statica perche' sono diverse ??? ..
MyClass.globale_statica = 3
# assegno 3 alla variabile globale_statica della classe MyClass
print a.globale_statica # sara' 3 ... come da manuale
print b.globale_statica # sara' 51, addio riferimenti alla classe,
benvenuto oggetto b
# PER CONCLUDERE ...
"""
se andiamo a pescare la statica tramite l' oggetto, questa si assegna
all' oggetto stesso
mentre se passiamo sempre per la classe l' oggetto non ha riferimenti
propri alla variabile interna
"""
More information about the Python
mailing list