[Python] Liste e collezioni

Pietro Battiston battiston a mail.dm.unipi.it
Lun 25 Feb 2008 15:22:58 CET


Salve a tutti,

supponiamo (è la semplificazione di un problema che ho davvero) che io
abbia una classe A:

class A():
    def metodo1(self):
       ....
    def metodo2(self):
       ....
    ....

Il mio programma usa questa classe e deve potere gestire
indifferentemente un singolo elemento o collezioni di elementi di questa
classe (fintanto che non ne deve ricevere alcun input, deve poterlo fare
trasparentemente senza domandarsi se è un elemento o è una lista di
elementi).

Il modo banale di risolvere il problema sarebbe far sì che il mio
programma in realtà maneggi solo liste (eventualmente con un solo
elemento). Ma in realtà il mio programma l'ho già scritto e non mi va di
cambiarlo, ma soprattutto di complicarlo.

Allora ho pensato di creare la seguente classe:

class listadiA(list):
    def metodo1(self, parametri):
       for i in self:
          self[i].metodo1(parametri)

    def metodo2(self, parametri):
       for i in self:
           self[i].metodo2(parametri)

    ....

(almeno per tutti i metodi che non ritornano alcun valore, poi gli altri
li "sovrascrivo" in modo meno banale)


Mi domando però se c'è un modo più furbo di scrivere una roba del
genere, per sprecare meno codice ma soprattutto per non doverlo
aggiornare se cambio/aggiungo metodi della classe originale...
Con "dir" io riesco ad avere tutti i metodi di "A", ma una volta che ho
un metodo non so come aggiungere il suo "metodo derivato" al dizionario
dei metodi di "listadiA".

In pratica avrei bisogno di modificare il dizionario dei metodi di
listadiA come fosse un qualsiasi dizionario.

C'è un modo per farlo o è pura follia?

grazie

Pietro



More information about the Python mailing list