On 24 September 2012 00:14, Mark Lawrence <breamore...@yahoo.co.uk> wrote:

> Purely for fun I've been porting some code to Python and came across the
> singletonMap[1].  I'm aware that there are loads of recipes on the web for
> both singletons e.g.[2] and immutable dictionaries e.g.[3].  I was
> wondering how to combine any of the recipes to produce the best
> implementation, where to me best means cleanest and hence most
> maintainable.  I then managed to muddy the waters for myself by recalling
> the Alex Martelli Borg pattern[4].  Possibly or even probably the latter is
> irrelevant, but I'm still curious to know how you'd code this beast.
>

What exactly is wanted when an attempt is made to instantiate an instance?
Should it raise an error or return the previously created instance?

This attempt makes all calls to __new__ after the first return the same
instance:

def singleton(cls):
    instance = None
    class sub(cls):
        def __new__(cls_, *args, **kwargs):
            nonlocal instance
            if instance is None:
                instance = super(sub, cls_).__new__(cls_, *args, **kwargs)
            return instance
    sub.__name__ == cls.__name__
    return sub

@singleton
class A(object):
    pass

print(A() is A())

Oscar
-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to