OOP techniques in Python

Philippe Martin pmartin at snakecard.com
Thu Apr 27 15:20:44 EDT 2006


Steven Bethard wrote:

> [Please don't top-post]
> 
> Steven Bethard wrote:
>  > Panos Laganakos wrote:
>  >> we usually define private properties and provide public functions
>  >> to access them, in the form of:
>  >> get { ... } set { ... }
>  >>
>  >> Should we do the same in Python:
>  >>
>  >> self.__privateAttr = 'some val'
>  >>
>  >> def getPrivateAttr(self):
>  >>     return self.__privateAttr
>  >>
>  >> Or there's no point in doing so?
>  >
>  > There is no point in doing so.  You should use plain attributes
>  > whenever possible (that is, whenever you're really just doing a get or
>  > a set, with no computation).  The only reason to use getters and
>  > setters is so that you can change the implementation later if you need
>  > to.  But python allows you to do this with properties:
> [snip]
>  > Which should not be interpreted as saying you should start writing a
>  > bunch of properties now. ;) Instead, only introduce a property when
>  > you find that something must remain an attribute (presumably for
>  > backwards compatibility reasons) but for whatever reason it now needs
>  > some additional computation.
> 
> Philippe Martin top-posted:
>> Why is that ? to me it makes sense when I see self.__m_var that I'm
>> dealing with a member variable taht derived classes will not see/access.
> 
> If the OP uses a private attribute in combination with a getter and a
> setter, he's basically still exposing the attribute as public, but
> making it harder to get and set.  There's no reason to do that.  If
> you're going to expose a public API to part of the class that just
> assigns and returns a value (with no computation), you might as well
> make that API an attribute instead of a pair of methods.
> 
> STeVe


> [Please don't top-post]

OK I won't, is that a general rule? (I've been top posting for quite some
time now and it is the first time I see that warning)

Philippe




-- 
---------------------------
"Poignée trop essorée, moulin bien rincé"
Pierre Lafouine
---------------------------




More information about the Python-list mailing list