How does Mr. Martelli's Borg recipe work ?

Erik Max Francis max at alcyone.com
Wed Jul 23 04:18:42 CEST 2003


Mars wrote:

> It is a very useful substitute for a Singleton, but I can't figure out
> how it works. _shared_state is never assigned any value, only
> self.__dict__ is assigend self._shared_sate's value - or rather
> (self.)_shared_state must be assigned a value at some point, otherwise
> the code wouldn't work(right ?).

It is assigned a value; it's bound to a new, empty dictionary.  Since
it's a class attribute, that means that empty dictionary is shared by
all instances.

_All_ instances have precisely the same __dict__ object.  They all are
exactly the same.  That's how the pattern works.

>>> class Borg:
...  __sharedState = {}
...  def __init__(self):
...   self.__dict__ = self.__sharedState
... 
>>> x = Borg()
>>> y = Borg()
>>> x is y
0
>>> x.__dict__ is y.__dict__
1
>>> x.a = 123
>>> y.a
123
>>> y.b = 321
>>> x.b
321

-- 
   Erik Max Francis && max at alcyone.com && http://www.alcyone.com/max/
 __ San Jose, CA, USA && 37 20 N 121 53 W && &tSftDotIotE
/  \ People say that life is the thing, but I prefer reading.
\__/  Logan Pearsall Smith




More information about the Python-list mailing list