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