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

Reply via email to