[Python] Pattern singleton e chiamata __call__

efphe effetom a gmail.com
Gio 29 Mar 2007 01:50:45 CEST


-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Sbaush wrote:
> Ciao a tutti. Sto sviluppando una applicazione Python e mi sono trovato a
> dover implementare il pattern Singleton, seguendo quanto descritto in [1].
> Ho trovato diverse soluzioni su internet già scritte quindi il mio lavoro si
> è trasformato nel dover scegliere quella che sembrava adattarsi meglio alla
> vera natura del problema ed alla più corretta implementazione della
> soluzione.

Il mio piu' caldo, personale consiglio e' quello di evitare
*assolutamente* questo design pattern in python. Produce del maligno
(problemi con ereditarieta' ed ereditarieta' multipla e codice
illeggibile, almeno).

Non abbiamo bisogno del singleton, ne del borg. Li abbiamo gia'.

Usa le classi (senza istanziarle) e gli staticmethods.

Esempio:

  ### BEGIN ###
  class A:

   bar= 1

   @staticmethod
   def foo():
    print 'foo'

   @staticmethod
   def set_bar(value):
    A.bar= value

   @staticmethod
   def get_bar():
    return A.bar

  class B(A):
   pass

  A.get_bar()
  A.set_bar(11)
  b= B()
  c= B()
  b.get_bar()
  c.get_bar()
  b.set_bar(10)
  c.get_bar()
  ### END ###


Non istanziare A, usala direttamente.
Puoi invece instanziare tranquillamente delle sottoclassi di A.

In conclusione, il mio consiglio (da adattare piu' o meno alle tue
esigenze) e':

1- dichiara una classe e dotala di tutti gli statimethods di cui
necessiti.
2- quando una classe dovra' incarnare il tuo singleton, basta ereditare.


- --
efphe
Today is Boomtime, the 14th day of Discord in the YOLD 3173
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.5 (GNU/Linux)

iD8DBQFGCv9Vi7obm7aBjHcRAjbNAJ4srvslbZw7qTXf5fPRWqQM0/sdOACcC1Py
QHRjh6apBi6TfEyJDqkW5F4=
=1PGi
-----END PGP SIGNATURE-----


Maggiori informazioni sulla lista Python