On Jun 3, 12:17 am, 7stud <[EMAIL PROTECTED]> wrote: > 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
Oops. This line: > temp = object.__new__(Sample, args, kwds) should be: temp = object.__new__(cls, args, kwds) although it would seem that cls is always going to be Sample, so I'm not sure what practical difference that makes. -- http://mail.python.org/mailman/listinfo/python-list