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

Rispondere a