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 7 1108
On Jun 2, 10:31 pm, lialie <lia...@gmail.comwrote:
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
Try something like this:
class A(object):
pass
def getObj(alist):
if alist:
return alist.pop()
else:
return A()
x = [A(), A()]
print x
newlist = []
for i in range(0,3):
newlist.append(getObj(x) )
print newlist
--output:--
[<__main__.A object at 0x55bf0>, <__main__.A object at 0x55b50>]
[<__main__.A object at 0x55b50>, <__main__.A object at 0x55bf0>,
<__main__.A object at 0x55d30>]
Examine the addresses, i.e. the set of numbers in each <....>
I just noticed that in your code you used pop(0). It's not efficient
to pop an element off the front of a list because after doing so,
every other element in the list has to be moved over to the left one
position. If you pop() an element off the end of the list, then the
first element in the list remains the first element, and the 2nd
element remains the 2nd element, etc., so no shifting of the remaining
elements is required. If you need to pop elements of the front of a
list, then it's more efficient to use a deque, which can be found in
the collections module. Here is an example:
import collections
class A(object):
pass
def getObj(a_deque):
if a_deque:
return a_deque.popleft()
else:
return A()
x = collections.deque([A(), A()])
print x
newlist = []
for i in range(0,3):
newlist.append(getObj(x) )
print newlist
--output:--
deque([<__main__.A object at 0x55d90>, <__main__.A object at
0x55db0>])
[<__main__.A object at 0x55d90>, <__main__.A object at 0x55db0>,
<__main__.A object at 0x55e30>]
On Jun 2, 10:31 pm, lialie <lia...@gmail.comwrote:
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
On Jun 3, 12:17 am, 7stud <bbxx789_0...@yahoo.comwrote:
On Jun 2, 10:31 pm, lialie <lia...@gmail.comwrote:
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.
On Sat, 02 Jun 2007 23:25:49 -0700, 7stud wrote:
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.
What if you are calling it from a sub-class?
--
Steven.
On Jun 3, 12:50 am, Steven D'Aprano
<s...@REMOVE.THIS.cybersource.com.auwrote:
On Sat, 02 Jun 2007 23:25:49 -0700, 7stud wrote:
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.
What if you are calling it from a sub-class?
--
Steven.
cls it is!
On Jun 3, 2:17 pm, 7stud <bbxx789_0...@yahoo.comwrote:
On Jun 2, 10:31 pm, lialie <lia...@gmail.comwrote:
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
Thank you.
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() # Here you may lost one object :)
The free_objects list doesn't have orders. My sample code seems to
work. But follows may create a new instance:
class Sample(wx.Image):
free_objects = []
used_objects
def __int__(self, *args, **kwds):
wx.Image.__init__(self, *args, **kwds) #### play tricks with
me :)
pass
def __new__(cls, *args, **kwds):
# The same
wx.Image always create a new instance. It seems that I have to avoid
wx.Image.__init__. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics
by: John Ratliff |
last post by:
When I dereference a pointer, does it make a copy of the object?
Say I had a singleton, and wanted an static method to retrieve it from
the class.
class foo {
private:
static foo *bar;
...
|
by: I am Sam |
last post by:
using System;
using System.Drawing;
using System.Text;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
using System.ComponentModel;...
|
by: Russell Warren |
last post by:
I just ran across a case which seems like an odd exception to either
what I understand as the "normal" variable lookup scheme in an
instance/object heirarchy, or to the rules regarding variable...
|
by: AMDRIT |
last post by:
Hello everyone,
VB2003-Winforms
I have a class object (testclass), that I would like to bind parts of to two
custom controls (control1 and control2). The testclass is stored in a hash
table...
|
by: tony |
last post by:
Hello!
If I want to prevent creation of object for a class.
I can accomplish this by using different technique.
One way of doing this is to define the class to be abstract even if all the...
|
by: --== Alain ==-- |
last post by:
Hi,
I have some issue to debug my custom control.
For example, in my solution i have 2 projects.
1 project is my custom control and the other one, is a windows form
application.
I would...
|
by: Rotsey |
last post by:
Hi,
I am loading a tab control on a form.
The code loads textboxes and comboboxes and checkboxes, normal
data entry form that loads a table row of data.
I have a combo on the form above the...
|
by: mitrofun63 |
last post by:
Hi, All
I have trouble with db2 instance creation (DB2 9.1.2 on AIX 5.3)
When i run command for instance creation :
../db2icrt -a SERVER -p 50000 -s ese -u db2fenc1 db2inst1
a reciveve...
|
by: Tom P. |
last post by:
I am doing quite a bit of custom painting and it means I have to
create a lot of brushes (think one for every file system object in a
directory) per paint. How expensive is this? Should I find a...
|
by: taylorcarr |
last post by:
A Canon printer is a smart device known for being advanced, efficient, and reliable. It is designed for home, office, and hybrid workspace use and can also be used for a variety of purposes. However,...
|
by: Charles Arthur |
last post by:
How do i turn on java script on a villaon, callus and itel keypad mobile phone
|
by: ryjfgjl |
last post by:
In our work, we often receive Excel tables with data in the same format. If we want to analyze these data, it can be difficult to analyze them because the data is spread across multiple Excel files...
|
by: emmanuelkatto |
last post by:
Hi All, I am Emmanuel katto from Uganda. I want to ask what challenges you've faced while migrating a website to cloud.
Please let me know.
Thanks!
Emmanuel
|
by: BarryA |
last post by:
What are the essential steps and strategies outlined in the Data Structures and Algorithms (DSA) roadmap for aspiring data scientists? How can individuals effectively utilize this roadmap to progress...
|
by: nemocccc |
last post by:
hello, everyone, I want to develop a software for my android phone for daily needs, any suggestions?
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However,...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers,...
|
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven...
| |