[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