Removing objects
Asun Friere
afriere at yahoo.co.uk
Wed Jan 23 02:16:16 EST 2008
On Jan 23, 5:59 pm, bladedpeng... at gmail.com wrote:
> I am writing a game, and it must keep a list of objects. I've been
> representing this as a list, but I need an object to be able to remove
> itself. It doesn't know it's own index. If I tried to make each object
> keep track of it's own index, it would be invalidated when any object
> with a lower index was deleted. The error was that when I called
> list.remove(self), it just removed the first thing in hte list with
> the same type as what I wanted, rather than the object I wanted. The
> objects have no identifying charachteristics, other than thier
> location in memory
>
> So my question: How do I look something up in a list by it's location
> in memory? does python even support pointers?
>
> Is there a better way?
How about adding an id attribute to your objects, which will contain a
unique identifier, override __eq__ to use that id to compare itself to
others and then simply pop off the object using
object_list.pop(object_list.index(self)). Something like this:
>>> class Spam (object) :
def __init__ (self, id) :
self.id = id
def __eq__ (self, other) :
try :
return self.id == other.id
except AttributeError :
return False
>>>
>>> a,b,c = Spam(1), Spam(2), Spam(3)
>>> x = [a,b,c]
>>> x.pop(x.index(c))
<__main__.Spam object at 0x885e5ac>
Except your object would be telling the list to pop self of course,
and you'd need someway of insuring the uniqueness of your IDs.
More information about the Python-list
mailing list