Declarative properties
Marc 'BlackJack' Rintsch
bj_666 at gmx.net
Thu Oct 11 09:46:12 EDT 2007
On Thu, 11 Oct 2007 13:04:53 +0000, Artur Siekielski wrote:
> On Oct 11, 2:27 pm, Marc 'BlackJack' Rintsch <bj_... at gmx.net> wrote:
>> But why? Default getters and setters are unnecessary and if you need
>> something other than the default you need to write it anyway more
>> explicitly.
>
> I see some problems with your approach:
>
> 1. If I use instance field 'name' which is accessed directly by other
> classes,
> and later I decide to implement nonstandard getter, I must refactor
> 'Person' class
> and in some places change 'name' to '_name' (assuming this is now the
> field's name).
> The problem is that I cannot automatically change 'name' to '_name'
> everywhere, because
> in some places I want public property value (eg. validated and
> formatted), and in other
> places raw property value.
So what? Otherwise you carry *always* the baggage of a public property
and a private attribute whether you need this or not. At least for me it
would be unnecessary in most cases.
> 2. Properties define (a part of) public interface of a class. When
> using fields for public
> access, you must tell this explicitly in documentation, or use name
> convention. And public
> fields definition is mixed with private fields, which doesn't happen
> when using properties.
Attributes are public unless you start the name with an underscore which is
by convention a warning to not use that attribute unless you know what you
are doing. With properties all over the place you use that convention
anyway because the "real" value for `name` is bound as `_name`. So you
clutter your API with two attributes for non-method-attributes.
And a property is not automatically part of the public API, just if the
name does not start with an underscore.
> 3. Using properties as first-class objects gives possibilities to use
> declarative approaches for constructing them.
No idea what you mean here. Everything in Python is an object.
Ciao,
Marc 'BlackJack' Rintsch
More information about the Python-list
mailing list