OOP techniques in Python
Philippe Martin
pmartin at snakecard.com
Thu Apr 27 14:01:52 EDT 2006
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.
Philippe
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:
>
> >>> class C(object):
> ... def __init__(self, x):
> ... self.x = x
> ...
> >>> C(42).x
> 42
> >>> class C(object):
> ... def _get_x(self):
> ... return self._x * 2
> ... def _set_x(self, value):
> ... self._x = value / 2
> ... x = property(_get_x, _set_x)
> ... def __init__(self, x):
> ... self.x = x
> ...
> >>> C(42).x
> 42
>
> 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.
>
> STeVe
More information about the Python-list
mailing list