Hi, I m trying to implement an object which contains lazy" variables. My idea is to alter the getattr and the setattr methods. However I keep on getting a recursion error.
My idea is that the lazy variable can be stored in a variety of places, Database, PyTables etc. The lazy variable is a large variable and so I dont want to hold it in memory all of the time, I d rather just get it when needed and then store it for future work. Most of the work will be done using var1 and var2 So ...... class LazyBase(object): self.var1 = 0 self.var2 = None def __init__(self, name): self.name = name def __str__(self): return self.name def __setattr__(self, attr, k): if attr == "var1": if self.var1 != k self.var1 = k if self.lazy != None self.lazy = None elif attr == "var2" : if self.var2 != k self.var2 = k if self.lazy != None self.lazy = None else: raise Exception("Attribute") class SQLLazy(LazyBase): def __init__(self, name, table="test_table"): self.table = table LazyBase.__init__(name) self.lazy = None def __getattr__(self, attr): if attr == "lazy": if self.lazy == None: # problem line I think print "Hit Database" # use sqlalchemy to get the variable # set self.lazy = lazy return self.lazy else: return self.lazy else: try: return Lazy.__getattr__(attr) except: raise Exception("Attribute Exception") def __setattr__(self, attr, k): if attr == "lazy" raise Exception("Cannot alter lazy") else: try: Lazy.__setattr__(attr, k) except: raise Exception("Attribute Exception") if __name__=='__main__': spam = SQLLazy("Test") spam.var2 = 10 print spam.lazy print spam.lazy spam.var2 = 5 print spam.lazy I m expecting the output: Hit Database Lazy Variable Lazy Variable Hit Database Lazy Variable However I just get recursion errors. Does anyone have any ideas how I can implement this sort of thing through my current method, or is there a better way to accomplish this. THanks Nathan -- http://mail.python.org/mailman/listinfo/python-list