2014-11-29 11:15 GMT+00:00 Marco Ippolito <ippolito.ma...@gmail.com>:
> ciao Marco, > ti ringrazio per la risposta. > > Ammetto che faccio fatica a comprendere il caso concreto. > Entrando nello specifico. Consigli di usare @staticmethod quando è > utile disaccoppiare il metodo dall'oggetto. > Personalmente, suggerisco di guardare staticmethod con sospetto. Ci sono casi in cui e' utile, indubbiamente. Il commento chiave e': """ Avrei potuto utilizzare una normale funzione ma può essere utile avere tutte le funzioni organizzate sotto lo stesso tetto, oppure può essere necessario nel caso in cui l'oggetto implementi una specifica interfaccia. """" In particolare, spesso e volentieri volere a tutti i costi usare staticmethod per fare il mestiere di funzioni (sotto sotto quello sono, funzioni nel namespace di una classe) e' indice di qualcosa che non funziona. Poi ci sono una serie di casi in cui la faccenda puo' anche avere senso (e.g., si sta implementando uno strategy pattern e si hanno parti della strategia che davvero non dipendono dalla definizione dell'istanza o della classe). In generale, dal mio punto di vista, e' un potenziale smell che sa *molto* di Javista (ovvero, la maggior parte degli usi di staticmethod che vedo sono a sproposito, quelli "buoni" sono una minoranza). A me verrebbe da dirti: capisci come funziona, archivia da qualche parte che esiste, cerca di non rivolgerti a lui. Ci potrebbero essere casi in cui devi farlo, e sperabilmente ti sara' chiaro allora. Sospetta quando succede, valuta le alternative, e se alla fine porta benefici vai senza paura: e' una feature del linguaggio e non ha nulla di male di per se. Solo attento a non usarla a sproposito. Se ad un certo punto ti accorgi che stai facendo classi che sono solo o principalmente raggruppamenti statici in un namespace di metodi correlati, metti conto che quello sarebbe il mestiere dei moduli. -- . ..: -enrico-
_______________________________________________ Python mailing list Python@lists.python.it http://lists.python.it/mailman/listinfo/python