On Mon, 28 Feb 2005 15:50:22 -0500, Dan Sommers wrote: > The reason their code is so inflexible is that they've filled their > classes with boiler plate get/set methods. > > Why do users of classes need such access anyway? If my class performs > useful functions and returns useful results, no user of my class should > care about its attributes. If I "have to" allow access to my attributes > in order that my users be happy, then I did something else wrong when I > designed the class and its public interface in the first place.
Consider an interface to a temperature controller. It will have several properties: - current temperature (read only) - target temperature (read/write) - various tuning parameters that affect the rate of change, stability, etc.; eg, lookup details on a PID controller These are properties of the temperature controller object. In Python these properties are traditionally mapped to attributes. Under languages that don't have a __getattr__/"property" mechanism for separating interface from implementation these are implemented via get/set accessor methods. It is very often useful to change the temperature setting of a controller over time. Eg, a chemical protocol might say "warm from 50 to 80 over a period of 30 minutes, 1 degree per minute". In Python that might be written as: temp_controller = TemperatureController("/dev/com3") temp_controller.target = 50 print "Bringing reactor to", temp_controller.target while 1: print "Current temperature is", temp_controller.current if abs(temp_controller.current - temp_controller.target) < 0.1: break time.sleep(30) raw_input("Insert sample and press the <enter> key: ") for temp in range(51, 81): print "Raising reactor temperature to", temp temp_controller.target = temp time.sleep(60) if abs(temp_controller.current - temp) > 0.1: print "Variance too high!", temp_controller.current print "DONE!" What's wrong with the use of attributes in this case and how would you write your interface? Andrew [EMAIL PROTECTED] -- http://mail.python.org/mailman/listinfo/python-list