At 11:54 AM 2/6/2009 -0800, Scott David Daniels wrote: >About my message: >>> ... Nickel summary, lookup order is not dirt simple, and reading >>> and writing work differently. > >David MacQuigg wrote: >>Maybe I'm missing some subtleties, but it still seems simple to me. >>An attribute is looked up in the order object -> class -> superclasses, >>*UNLESS* that attribute happens to be a property of the class.... > >The subtleties involve the difference in the lookup order between >read-only properties and properties with a write method. > >>... >>class Rectangle(object): >> >> def __init__(self, width, height): >> self.width = width >> self.height = height >># self.area = width * height >> >> def getArea(self): >> return self.width * self.height >> >> area = property(getArea) >>... > >Written in later versions of Python (2.5 and up) as: > > class Rectangle(object): > def __init__(self, width, height): > self.width = width > self.height = height > # self.area = width * height > > @property > def area(self): > return self.width * self.height
Nice! Syntax sugar for the more explicit form. I'll update my examples. As for the subtle changes in lookup order, I could include some discussion under Advanced Topics (Metaclasses, Cooperative Super Calls, etc.), but I will need to see a clear example that is relevant to the non-programmer scientists and engineers I am targeting. Else, the value is too low and the complexity too high. The @property example above *is* appropriate for my OOP chapter (under the topic Robust Programming). It is simple, and understanding the concept of protected attributes is good even if you don't use them. -- Dave _______________________________________________ Edu-sig mailing list [email protected] http://mail.python.org/mailman/listinfo/edu-sig
