Getting back an Object

Gary Herron gherron at islandtraining.com
Fri Mar 28 06:29:13 CET 2008


David Anderson wrote:
> Well, I've got a little problem, I have a list that contains objects 
> from the class C, then I use those objects.__str__ to generate a 
> ListCtrl, A wxPython widget that makes a list of strings and then you 
> can handle events when selected, and returns the string selcted, how 
> can I access the "parent" of that string?
> I tried to search on the array like this:
> def search(self, string):
>       for obj in self.list:
>            if string == obj.__str__:
>                  return obj
>        return None
>
> But I always get None... What am I doing wrong?

Once again, you are confused over the difference between a value and a 
function that, when called,  returns a value.

obj.__str__ is a function. 

If you call it like this, obj.__str__(), then you get a string.

So your comparison should be 
      if string == obj.__str__():

Slightly better would be to call
    str(obj)
and let Python translate that into a call to __str__.


But even better is to replace this rather bogus approach with something 
better.  When you create an object, record its string representation in 
a dictionary to be used to recover the object when given a string later:

That is, for each object obj do:
    objMap[str(obj)] = obj

and later with the string in hand, do
  obj = objMap[string]

One other word of warning.  It is best to not use a variable named 
"string" as Python has a builtin type of that name which would become 
inaccessible if you redefine.

Gary Herron




More information about the Python-list mailing list