471,853 Members | 961 Online
Bytes | Software Development & Data Engineering Community
Post +

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 471,853 software developers and data experts.

Deleting objects

Say I have an object (foo), that contains an
array (bar) of references to other objects.

Now I want to puff some of the objects from the
array so that I remove the array element, and
destroy the oject.

but when I do:

del foo.bar[0]

Python says:
object doesn't support item deletion

So do I need to define __del__? And what would I
put there?

What if I wanted to remove the array element
but still have the object exist?

What happens if I succeed in destroying an object
that other objects still think they are referencing?

Thanks,

Toby

Jul 18 '05 #1
3 5673

<us**@domain.invalid> wrote in message
news:c5******************************@news.teranew s.com...
Say I have an object (foo), that contains an
array (bar) of references to other objects.

Now I want to puff some of the objects from the
array so that I remove the array element, and
destroy the oject.

but when I do:

del foo.bar[0]

Python says:
object doesn't support item deletion


What is the actual type of foo.bar? >>>type(foo.bar) # prints what?

tjr
Jul 18 '05 #2
On Wed, 2004-01-14 at 17:23, us**@domain.invalid wrote:
Say I have an object (foo), that contains an
array (bar) of references to other objects.

Now I want to puff some of the objects from the
array so that I remove the array element, and
destroy the oject. but when I do:

del foo.bar[0]

Python says:
object doesn't support item deletion


It'd be helpful if you supplied the code in question. Then again, we
wouldn't be able to let our imagination wander with what puff might
mean. <wink>

Anyway, is this the sort of thing you're talking about?

#!/usr/bin/env python

class Foo:

def __init__(self):
self.bar = []

def __str__(self):
return '<Foo><bar>%s</bar></Foo>' % (str(self.bar),)

l = range(10)

foo = Foo()
foo.bar.append(l)
del foo.bar[0]
print 'foo = %s' % (str(foo),)
print 'l = %s' % (l,)

Cheers,

// m
Jul 18 '05 #3
us**@domain.invalid wrote:
Say I have an object (foo), that contains an
array (bar) of references to other objects.

Now I want to puff some of the objects from the
array so that I remove the array element, and
destroy the oject.
You don't need to jump through hoops for this. All you need to do is:

del foo

If there are no other references to the object that was called foo
above, then (and only then) it will be destroyed.

Python keeps a reference count for each object. When the count hits 0
(no references pointing to object) it is destroyed.

Because of this, attributes of foo (eg foo.bar) will automatically be
destroyed when foo is destroyed (assuming they don't have references
from elsewhere).

but when I do:

del foo.bar[0]

Python says:
object doesn't support item deletion

So do I need to define __del__? And what would I
put there?
What is the type of foo.bar?

What if I wanted to remove the array element
but still have the object exist?
del foo.bar

This will remove the reference foo.bar.
What happens if I succeed in destroying an object
that other objects still think they are referencing?


Try as you might, shooting yourself in the foot is pretty hard in Python
(see above :)

--
Shalabh

Jul 18 '05 #4

This discussion thread is closed

Replies have been disabled for this discussion.

Similar topics

2 posts views Thread by Thomas Philips | last post: by
6 posts views Thread by Thomas Philips | last post: by
6 posts views Thread by Matan Nassau | last post: by
9 posts views Thread by Aguilar, James | last post: by
4 posts views Thread by al havrilla | last post: by
51 posts views Thread by Joe Van Dyk | last post: by
62 posts views Thread by ivan.leben | last post: by
NeoPa
reply views Thread by NeoPa | last post: by
reply views Thread by YellowAndGreen | last post: by
aboka
reply views Thread by aboka | last post: by

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.