Singleton suggestions requested

June Kim junaftnoon at nospamplzyahoo.com
Tue Apr 17 21:28:17 EDT 2001


In the 6th IPC, there was a paper "Design Patterns in Python", wherein a
decent singleton pattern is presented. There are some other patterns such as
CoR, Proxy.

http://www.python.org/workshops/1997-10/proceedings/savikko.html

June Kim

"Chris Green" <cmg at uab.edu> wrote in message
news:m2ae5glo95.fsf at phosphorus.tucc.uab.edu...
> I'm revisiting python after several years away and implementing a
> medium sized project with it.  One of the first things I'm doing is
> trying to get a few helper util functions working
>
> After doing some websearches for OO Singleton implementations, I came
> across http://www-md.fsl.noaa.gov/eft/developer/python/hints/ftul.html
> which has Fredrik Lundh's code.
>
> How would one improve upon this?  I'm still not fully in the python
> mindset and I'd like to brainwash myself somemore before I get deep
> into the project and realize I wanted better basics.
>
> There's some testing code as well so it should be fairly
> self-explanatory.
>
> # Registry Singleton Ideas taken from Fredrik Lundh
<Fredrik_Lundh at ivab.se>
> #
> # A Python Pattern: "Singleton/F"
>
> class _SingletonRegistry:
>     instance = None
>     registry = {}
>
>     def __init__(self):
>         pass
>
>     def getClass(self, Class, *args, **keywords):
>         print "ARGS = " + str(args)
>         print "class: " + str(Class)
>         print "keywords: " + str(keywords)
>
>         try:
>             f = self.registry[Class]
>         except KeyError:
>             self.registry[Class] = apply(Class, args, keywords)
>
>         print "CLASS: " + str(self.registry[Class])
>         return self.registry[Class]
>
>
> def SingletonRegistry():
>     """ Returns a SingletonRegistry reference, creating it if necessary
"""
>     if not _SingletonRegistry.instance:
>         _SingletonRegistry.instance = _SingletonRegistry()
>
>     return _SingletonRegistry.instance
>
>
> if __name__ == '__main__':
>     class Foo:
>         name = 'wee'
>
>     class Bar:
>         def __init__(self, *args):
>             print "Bar.__init__ args: " + str(args)
>
>     class Baz:
>         def __init__(self, *args, **keywords):
>             print "Bar.__init__ args: " + str(args)
>             print "Baz.__init__ keywords: " + str(keywords)
>
>
>     sr = SingletonRegistry()
>
>     myFoo = sr.getClass(Foo)
>     myFoo2 = sr.getClass(Foo)
>
>     myBar = sr.getClass(Bar, "arg1", "arg2")
>     myBar2 = sr.getClass(Bar, "arg1", "arg2")
>
>     myBaz = sr.getClass(Baz, "arg1", "arg2", cheese=1, beer=2)
>     myBaz2= sr.getClass(Baz, "arg1", "arg2", cheese=1, beer=2)
>
>     print "myFoo  :" + str(myFoo)
>     print "myFoo2 :" + str(myFoo2)
>     print "myBar  :" + str(myBar)
>     print "myBar2 :" + str(myBar2)
>     print "myBaz  :" + str(myBaz)
>     print "myBaz2 :" + str(myBaz2)
>
> --
> Chris Green <cmg at uab.edu>
> You now have 14 minutes to reach minimum safe distance.




More information about the Python-list mailing list