On Jun 2, 10:31 pm, lialie <[EMAIL PROTECTED]> wrote: > Hi, > > suppose i have a free_object list[Sample1, Smaple2....]. when create a > new object sample(*args, **kwds), if free_object_list isn't empty, just > pop one from free_object_list instead of creating a new instance. > > any way to do this? > > I do some work as follows: > > class Sample(object): > used_object = [] > free_object = [] > > def __init__(self, *args, **kwds): > pass > > def __new__(self, *args, **kwds): > if Sample.free_object: > obj = Sample.free_object.pop(0) > else: > obj = object.__new__(Sample, *args, **kwds) > Sample.used_object.append(obj) > return obj > > ######## still get a new instance :( > > def Release(self): > Sample.used_object.remove(self) > Sample.free_object.append(self) > return True
This seems to work for me: import collections class Sample(object): free_objects = collections.deque() used_objects = [] def __new__(cls, *args, **kwds): if not Sample.free_objects: temp = object.__new__(Sample, args, kwds) Sample.used_objects.append(temp) return temp else: return Sample.free_objects.popleft() def __init__(self, *args, **kwds): self.args = args self.kwds = kwds def release(self): Sample.used_objects.remove(self) Sample.free_objects.append(self) s1 = Sample(10, name="Bob") print s1 print s1.args print s1.kwds s2 = Sample("red", name="Bill") print s2 print s2.args print s2.kwds s1.release() s3 = Sample("blue", name="Tim") print s3 print s3.args print s3.kwds -- http://mail.python.org/mailman/listinfo/python-list