[Python] Quando è opportuno usare @staticmethod?

Marco Giusti marco.giusti a posteo.de
Sab 29 Nov 2014 14:36:20 CET


On Sat, Nov 29 2014, Marco Ippolito wrote:
> 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.
> Per cui nel caso specifico che hai illustrato, hai usato
> @staticmethod, definendo come tale il metodo di pygtk_obj per
> separarlo da quest'ultimo, cioè dapygtk_obj?
> E' giusto quello che dico o sto prendendo una cantonata?

Un esempio, in allegato, vale più di mille parole. Senza staticmethod
l'oggetto Foo non viene rilasciato.

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 realtà non sembra neache che ci sia un riferimento ciclico. Più cerco
di capire il funzionamento di pygtk, più mi risulta difficile capirlo.

Spero di essere stato più chiaro questa volta.

m.

> Il 29 novembre 2014 12:01, Marco Giusti <marco.giusti a posteo.de> ha scritto:
> > On Sat, Nov 29 2014, Marco Ippolito wrote:
> >> Ciao a tutti,
> >> mi potreste spiegare quando sarebbe opportuno, perchè più efficace od
> >> efficiente, usare @staticmethod invece di "inglobare" (scusate per il
> >> termine poco tecnico) una funzione all'interno di una classe python in
> >> modo normale?
> >>
> >> Marco
> >
> > E' opportuno quando è utile disaccoppiare il metodo dall'oggetto. Per
> > esempio Pygtk non gestisce i riferimenti ciclici e mi è capitato di
> > individuare un memory leak perché un oggetto aveva un riferimento an un
> > oggetto Pygtk e a quest'ultimo avevo associato un metodo dell'oggetto
> > contenitore.
> >
> > Ascii art time ;)
> >
> >          |-----------------------
> >          |                      |
> >         obj     pygtk_obj     method
> >          |       |  |           |
> >          --------|  ------------|
> >
> > Avrei potuto utilizzare una normale funzione, ma volevo conservare una
> > coerenza e ordine nelle funzioni e staticmethod me lo permetteva.
> >
> > m.
> >
> > _______________________________________________
> > Python mailing list
> > Python a lists.python.it
> > http://lists.python.it/mailman/listinfo/python
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome:        cyclic.py
Tipo:        text/x-python
Dimensione:  579 bytes
Descrizione: non disponibile
URL:         <http://lists.python.it/pipermail/python/attachments/20141129/ebfff68d/attachment.py>


Maggiori informazioni sulla lista Python