SIngleton from __defaults__

Asaf Las roegltd at gmail.com
Wed Jan 22 16:10:30 EST 2014


On Wednesday, January 22, 2014 6:18:57 PM UTC+2, Chris Angelico wrote:
> On Thu, Jan 23, 2014 at 3:07 AM, Asaf Las <r... at gmail.com> wrote:
> > is it possible to create singleton using construct below :
> >
> > def singleton_provider(x = [None]):
> >     if singleton_provider.__defaults__[0][0] == None:
> >         singleton_provider.__defaults__[0][0] = SomeClass()
> >     return singleton_provider.__defaults__[0][0]
> >
> 
> Why not simply:
> def get_singleton(x = SomeClass()):
>     return x
> Or even:
> singleton = SomeClass()
> ? Neither of the above provides anything above the last one, except
> for late creation.
> ChrisA

Hi Chris

Does it make sense to use former as template to make 
singleton from any class as below, so instead of addressing 
your second proposal using module name we can directly call 
this one supplying class candidate for singleness as argument
to function? 

class whatever():
    def __init__(self):
        self.one = 1
        self.zero = 0

def singleton_provider(someclass, x = [None]):
    if singleton_provider.__defaults__[0][0] == None:
        singleton_provider.__defaults__[0][0] = someclass()
    return singleton_provider.__defaults__[0][0]


print(id(singleton_provider(whatever)))

Thanks 

Asaf



More information about the Python-list mailing list