[Python] Re: Digest di Python, Volume 19, Numero 11

Sandro Dentella sandro a e-den.it
Ven 16 Nov 2007 18:01:27 CET


Ciao Pietro!

  credo che la risposta di Daniele Varrazzo sia già completa, ma aggiungo
  una cosa in attesa di sapere meglio cosa devi fare con quelle finestre

>class finestra(Tkinter.Toplevel):
>   def __init__(self):
>      self=Tkinter.Tk()            #Il mio oggetto instanziato lo  
>voglio identico ad una finestra toplevel "classica"...

se hai ereditato da Tkinter.Toplevel la tua classe è già una Toplevel
"classica". Forse con questa frase (a parloe) ed il codice sopr, volevi dire
questo:

class finestra(Tkinter.Toplevel):
   def __init__(self, mioattr=None, **kw):
      super(finestra, self).__init__(**kw)
      self.mio_attr = mioattr

o alternativamente:

class finestra(Tkinter.Toplevel):
   def __init__(self, mioattr=None, **kw):
      Tkinter.Toplevel.__init__(self, **kw)
      self.mio_attr = mioattr

dove vedi che puoi scegliere di avere gli stessi argomenti, ma puoi anche
estendere gli argomenti nel costruttore (puoi usare anche *args).

Questa è una tecnica molto usata per estendere una classe. Resta vero il
suggerimento di Daniele che in situazioni simili una funzione 'factory' può
fare al caso ma ci sono anche altre possibilità. In gtk mi sono spesso
trovato ad usare classi che come attributo avevano un widget GTK invece che
classi che fossero estensioni di un widget GTK.

Non so quanto sia pratico seguire le slide senza avere seguito il talk ma
Alex Martelli ha parlato dei Design Pattern al Pycon: credo che soprattuto
le prime slides potrebbero interessarti:
http://www.pycon.it/static/talks/it_pydp.pdf

ciao
sandro
*:-)

PS: io non ho idea di cosa faccia Tkinter.Tk() ma se ricordo corretto apre
    una finestra 'root' mentre toplevel è solo... una toplevel. Di 'root'ce
    ne è una sola, di Toplevel ce ne possono essere tante. Perchè erediti da
    una classe per poi sostituirla con una classe diversa, invece che
    ereditare direttamente da Tk?


Maggiori informazioni sulla lista Python