[Python] Re: Digest di Python, Volume 19, Numero 11
Pietro Battiston
battiston a mail.dm.unipi.it
Ven 16 Nov 2007 12:54:01 CET
python-request a lists.python.it ha scritto:
>> Il problema è riprodotto nel seguente codice:
>>
>> ###################################################
>> import Tkinter
>>
>> class finestra(Tkinter.Toplevel):
>> def __init__(self):
>> self=Tkinter.Tk() #Il mio oggetto instanziato lo
>> voglio identico ad una finestra toplevel "classica"...
>> self.stringa="testo" #... tranne che ci voglio
>> aggiungere i metodi e gli attributi che mi servono
>>
>
> Forse non ti è chiaro il modo in cui funzionano gli assegnamenti in
> python.
In realtà avevo sempre pensato che __init__ fosse una funzione "magica",
che salvasse realmente "self" anche senza return.
> Per fare quello
> che vuoi, devi utilizzare il __new__
Grazie mille, in effetti è proprio quello che mi serviva. Ma __new__
rimpiazza __init__?
Nella documentazione ufficiale
(http://docs.python.org/ref/customization.html), sta scritto " If
__new__() returns an instance of cls, then the new instance's __init__()
method will be invoked"
In un'altra pagina sull'argomento
(http://www.wellho.net/mouth/1146_-new-v-init-python-constructor-alternatives-.html),
invece ho trovato scritto "If __new__ is defined on a class, it is
called in preference to __init__"
Ma il seguente codice non mi conferma né l'una né l'altra ipotesi!
#####################
import Tkinter
class finestra(Tkinter.Toplevel):
def __new__(cls):
print "uno"
return Tkinter.Tk()
def __init__(self):
print "due"
root=finestra()
#####################
Infatti, eseguendo il codice, stampa "due", ovvero __init__ è stata
chiamata piuttosto che __new__...
Qualche illuminazione? (il tutorial __new__ non la nomina nemmeno...)
Pietro
P.S: Marco, non ti preoccupare, non avevo mai visto programmazione ad
oggetti prima di incontrare Python, quindi per me è //veramente// tutto
nuovo...
Maggiori informazioni sulla lista
Python