madpython wrote: > For the pure theory sake and mind expansion i got a question. > Experimenting with __new__ i found out how to create a singleton. > class SingleStr(object): > def __new__(cls,*args,**kwargs): > instance=cls.__dict__.get('instance') > if instance: > return instance > cls.instance=object.__new__(cls,*args,**kwargs) > return cls.instance > > What if i need to create no more than 5 (for example) instances of a > class. I guess that would be not much of a problema but there is a > complication. If one of the instances is garbagecollected I want to be > able to spawn another instance....
This should help. You didn't really say how to pick the result if there are duplicates, so I just decided for myself. Read up on the weakref module, it is your friend in this kind of problem. import weakref, random class Limited(any_new_style_class): _held_instances = weakref.WeakValueDictionary() _held_limit = 5 def __new__(class_, *args, **kwargs): if len(class_._held_instances) < class_._held_limit: # You could go over here if threading is an issue instance = super(class_, Limited).__new__( class_, *args, **kwargs) class_._held_instances[id(instance)] = instance return instance return random.choice(class_._held_instances.values()) --Scott David Daniels [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list