On Sep 3, 10:46 pm, Ripter <[EMAIL PROTECTED]> wrote: > I found this script > athttp://www.pygame.org/wiki/LazyImageLoading?parent=CookBook > And I can't quite figure out how it works. I was wondering if someone > could clarify it for me. > The Code is: > > import pygame > import weakref > > class ResourceController(object): > def __init__(self, loader): > self.__dict__.update(dict( > names = {}, > cache = weakref.WeakValueDictionary(), > loader = loader > )) > > def __setattr__(self, name, value): > self.names[name] = value > > def __getattr__(self, name): > try: > img = self.cache[name] > except KeyError: > img = self.loader(self.names[name]) > self.cache[name] = img > return img > > class ImageController(ResourceController): > def __init__(self): > ResourceController.__init__(self, pygame.image.load) > > My question is why does the __setattr__ set the value to > self.names[name] instead of self.cache[name]?
I feel stupid, I figured it out. (Don't program while watching Back to the Future) The reason would be the 'lazy' part. self.names holds the file name, and when you get the property back (__getattr__) it checks to see if it already got the value or not, and uses the name to get the value if it hasn't already. Duh. Sorry. -- http://mail.python.org/mailman/listinfo/python-list