Deleting objects

U

user

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
 
M

Mark McEahern

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
 
T

Terry Reedy

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
 
S

Shalabh Chaturvedi

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 :)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,567
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top