On Wed, 2005-10-05 at 12:56 -0400, Jonathan LaCour wrote: > > class Spam(object): > > cache = {} > > def __new__(cls, x): > > if cls.cache.has_key(x): > > return cls.cache[x] > > def __init__(self, x): > > self.x = x > > self.cache[x] = self > > > > a = Spam('foo') > > b = Spam('foo') > > > > Well, in this case a and b are identical... to None! I assume this is > > because the test in __new__ fails so it returns None, I need to then > > create a new Spam.. but how do I do that without calling __new__ > > again? > > I can't call __init__ because there's no self... > > > > > > Oops, you forgot to return object.__new__(cls, x) in the case the > object isn't in the cache. That should fix it.
Okay, one more question... say I then c = Spam('bar') del a del b I've removed all references to the object, except for the cache. Do I have to implement my own garbage collecting is or there some "magical" way of doing this within Python? I pretty much want to get rid of the cache as soon as there are no other references (other than the cache). -- http://mail.python.org/mailman/listinfo/python-list