Frans Englich wrote:

Hello,

I am having trouble with throwing class instances around. Perhaps I'm approaching my goals with the wrong solution, but here's nevertheless a stripped down example which demonstrates my scenario:


[snip]

The basic problem seems to be that you're trying to avoid creating a new instance in __init__--which is too late. By that point, the new object is already created. Rebinding the name self in __init__ doesn't do what you seem to think it will. Basically, you need to move the "only create this object if it doesn't already exist" logic outside of __init__.

Here's an alternative approach:

#!/usr/bin/env python

class Item:
   def __init__(self, name):
       self.name = name

class Factory:

   items = {}
   def getItemByName(self, name):
       item = Factory.items.get(name)
       if not item:
           item = Item(name)
           Factory.items[name] = item
       return item

def main():
   factory = Factory()
   name = 'foo'
   for x in range(10):
       i = factory.getItemByName(name)
       print i
   print len(factory.items)

if __name__ == "__main__":
   main()

--
http://mail.python.org/mailman/listinfo/python-list

Reply via email to