Re: Accessors in Python (getters and setters)




Bruno Desthuilliers wrote:
mystilleef wrote:
Bruno Desthuilliers wrote:

mystilleef wrote:
(snip)

Python doesn't have any philosophy with regards to naming identifiers.

Yes it does.


No it doesn't.


But they are in Python and that is the python's philosophy. All attribute or
method not beginning with an '_' *is* API.

Right, and what if I want to change a private API to a public one.

Then you provide a public API on top of the private one.

class MyClass(object):
def __init__(self, ...):
self._attr = XXX

# seems like we really have enough use
# cases to justify exposing _imp_attr
@apply
def attr():
def fget(self):
return self._attr
def fset(self):
self._attr = attr
return property(**locals())


def _method(self, ...):
# code here

# seems like we really have enough use
# cases to justify exposing _imp_method
method = _impmethod

Note that none of this actually breaks encapsulation.


Ha! Just as bad as getters and setter.

What point are you trying to make here ? Of course a computed attribute
is just syntactic sugar for getters and setters - what else could it be?

The difference is that you don't need to write explicit getters/setters
beforehand, nor to use a "behaviour" semantic.


How
does that solve my naming issues.

How could this solve *your* naming issue ? This is totally unrelated.
You choose a bad name for a *public* symbol.


My point exactly! It doesn't solve my problem!

What do you hope ? Something that cures cancer ? Please enlighten us and
explain how explicit getters/setters would have solved the problem of
badly named getters/setters ?

I did already. If I had used Java, Eiffel, Smalltalk or C++, I would
have easily changed tmp to temporary_buffer without having search and
replace or grep 27000 lines of code. The point of accessors in those
languages is encapsulation. Which means I can change any detail of
implementation, yes including names of attributes, without breaking
code.

.



Relevant Pages

  • Re: Accessors in Python (getters and setters)
    ... and what if I want to change a private API to a public one. ... def fget: ... The difference is that you don't need to write explicit getters/setters ...
    (comp.lang.python)
  • Re: Accessors in Python (getters and setters)
    ... and what if I want to change a private API to a public one. ... def fget: ... How could this solve *your* naming issue? ... "allmost all languages" lacks computed attributes. ...
    (comp.lang.python)
  • Restrictive APIs for Python
    ... API, directly accessing the private internals of a class. ... def restrictiveApi: ... _FRIENDS, both being lists of strings. ... Restricting the API will incur a ...
    (comp.lang.python)
  • Re: Accessors in Python (getters and setters)
    ... and what if I want to change a private API to a public one. ... def fget: ... "allmost all languages" lacks computed attributes. ...
    (comp.lang.python)