On 24 September 2012 00:14, Mark Lawrence <[email protected]> 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