Alan Gauld wrote: >> def values(self): >> return (self.name, self.wealth, self.strenth) >> >> Or get rid of values() entirely and just refer to the attributes > > Nope, I don't like that as much since it encourages direct > access.
Maybe we just need to agree to disagree here. I don't see how returning a tuple is better encapsulation than direct access to named attributes. And what if an attribute is added? Do you add another value to the tuple, forcing every client to change? Start returning a value object with named attributes? :-) >> directly - what if you want to print the values in a different >> order? > > returning a tuple means you can still access the individual > elements via indexing if you don't like the order given. But > you can (ie should) only access those attributes provided > by the values() call. So to print, say, strength, wealth and name, we can have values = explr.values() print values[2], values[1], values[0] or unpack the tuple and give them names again: strength, wealth, name = explr.values() print strength, wealth, name or just use the perfectly good names they already have: print explr.strength, explr.wealth, explr.name and of course unless you take extra steps to prevent it, direct attribute access is still available even with the values() method... Kent _______________________________________________ Tutor maillist - Tutor@python.org http://mail.python.org/mailman/listinfo/tutor