On 09/01/2013 12:13 PM, Roy Smith wrote:
In article <mailman.455.1378062400.19984.python-l...@python.org>,
Ethan Furman <et...@stoneleaf.us> wrote:
On 09/01/2013 03:09 AM, Fabrice Pombet wrote:
So I guess that we are actually all agreeing on this one.
No, we are not.
"encapsulation" != "inaccessible except by getters/setters"
Nothing is accessible in Python except via getters and setters. The
only difference between Python and, say, C++ in this regard is that the
Python compiler writes them for you most of the time and doesn't make
you put ()'s at the end of the name :-)
class Javaesque:
__value = None
def get_value(self):
return self.__value
def set_value(self, new_value):
validate(new_value)
self.__value = new_value
class ProtectedPython:
_value = None
@property
def value(self):
return self._value
@value.setter
def value(self, new_value)
validate(new_value)
self._value = new_value
class PlainPython:
value = None
In the Javaesque class we see the unPythonic way of using getters/setters; in the ProtectedPython* class we see the
pythonic way of providing getters/setters**; in the PlainPython class we have the standard, unprotected, direct access
to the class attribute.
No where in PlainPython is a getter/setter defined, nor does Python define one
for us behind our backs.
If you have evidence to the contrary I'd like to see it.
* Not the best name, but oh well.
** In Python, using @property makes getter/setter usage look just like normal
attribute usage, which is cool.
--
~Ethan~
--
http://mail.python.org/mailman/listinfo/python-list