Generic singleton
Steven D'Aprano
steven at REMOVE.THIS.cybersource.com.au
Wed Mar 3 21:14:18 EST 2010
On Wed, 03 Mar 2010 19:54:52 +0100, mk wrote:
> Hello,
>
> So I set out to write generic singleton, i.e. the one that would do a
> singleton with attributes of specified class. At first:
Groan. What is it with the Singleton design pattern? It is one of the
least useful design patterns, and yet it's *everywhere* in Java and C++
world.
I suspect because it allows people to have all the bugs and difficulties
of global variables, while still pretending to be virtuous for not using
global variables. But maybe I'm cynical...
There are a ton of recipes out there for Python Singletons. Don't forget
to check out the Borg pattern, which gives more or less the same effect
using a radically different approach.
Then, my advice is to forget all about them. In my experience, I have
never needed to code my own Singleton class in anything except toy
examples. YMMV.
> print id(s1) == id(s2)
Or, more concisely:
s1 is s2
> class Singleton(object):
>
> instd = {}
>
> def __new__(cls, impclass, *args, **kwargs):
> impid = id(impclass)
Yuck. Why are you using the id of the class as the key, instead of the
class itself?
class Singleton(object):
instd = {}
def __new__(cls, impclass, *args, **kwargs):
if not impclass in cls.instd:
cls.instd[impclass] = impclass.__new__(
impclass, *args, **kwargs)
return cls.instd[impclass]
> Questions:
>
> 1. Is this safe? That is, does every builtin class have unique id? I
> have found this in docs:
Why are you limiting yourself to builtin classes?
ALL objects, whether classes or builtins or strings or ints or instances
of a class you built yourself, have a unique id that lasts for the
lifespan of the object. But that is certainly not what you care about.
--
Steven
More information about the Python-list
mailing list