On 09/17/2012 07:34 PM, Terry Reedy wrote: > On 9/17/2012 6:12 PM, Chris Angelico wrote: >> On Tue, Sep 18, 2012 at 7:55 AM, Fernando Jiménez >> <the.me...@gmail.com> wrote: >>> Hi guys! >>> >>> I'm noob in python and I would know how to correctly use the >>> property. I >>> have read some things about it but I do not quite understand. >>> >>> But I think it's a bad habit to use _ to change the visibility of the >>> attributes as in JAVA. >>> >>> How to correctly use the property? >> > <snip>
> More examples: > > A class has a data attribute that really is a simple attribute, no > property. You define a subclass that needs a calculation for the > attribute. So you use property in the subclass. > > A class has an attribute that is a constant that must be computed. You > do not want to compute is unless and until needed. > > def get_x(self): > try: > return self._x > except AttributeError: > self._x = calculate_x() > return self._ > > For a read-only attribute, don't provide a setter. If you do not like > "AttributeError: can't set attribute", provide one with a customized > error. > > But I think most of the data attributes in stdlib classes are straight > attributes. > An important difference from every other language I've used: The user of the attribute does not need to change his code when you decide it needs reimplementation as a property. In C++ and java, for example, people will define getter and setter methods just so they don't have to change them later. Just "in case" it's needed later. -- DaveA -- http://mail.python.org/mailman/listinfo/python-list