[EMAIL PROTECTED] 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...
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python

Rispondere a