Il giorno 16/nov/07, alle ore 09:20, Pietro Battiston ha scritto:
Salve a tutti. Dal basso della mia scarsa esperienza con gli
oggetti, ho un problema forse banale ma che si scontra da un paio
di giorni con tutto quello che ho sempre pensato sulle classi.
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 quel modo assegni al nome "self" locale alla funzione un
oggetto. Ma non stai modificando l'oggetto stesso! Per fare quello
che vuoi, devi utilizzare il __new__ in un modo simile a questo (non
testato):
class Finestra(Tkinter.Toplevel):
def __new__(cls):
oggetto = Tkinter.Tk()
oggetto.stringa = "testo"
return oggetto
Questo supponendo che Tkinter.Tk() restituisca un valore di tipo
Tkinter.Toplevel (non conosco tkinter)<
Ho provato a ragionarci un po'... ma se la classe Toplevel
(ovviamente ho verificato nella docstring che Tkinter.Tk "Return a
new Toplevel widget...") non ha di per sé il metodo "update", come
può essergli aggiunto dalla funzione Tk?! Un metodo non può essere
aggiunto ad un'istanza solo aggiungendolo alla sua classe?! E se
anche non fosse così, e in realtà Tkinter.Tk() avesse qualche modo
magico di aggiungere metodi, perché questi metodi non si vedono
dall'"esterno" della classe finestra?
No, un metodo può essere aggiunto anche a una singola istanza.
Pietro
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python
--
Antonio Valente
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python