Does Python really follow its philosophy of "Readability counts"?

James Mills prologic at shortcircuit.net.au
Tue Jan 20 06:04:34 CET 2009


On Tue, Jan 20, 2009 at 2:39 PM, Luis Zarrabeitia <kyrie at uh.cu> wrote:
> This line would make a lot more sense if you were talking about Java's getters
> and setters, or about a language where accessing a property is different than
> accessing an attribute (which would make little sense). If properties already
> let you change from attribute to method without affecting the caller, why do you
> need a property that does nothing?

My point exactly. Russ seems to agree with Python
but yet argue points for the sake of it. I'm not sure why :)

Having come from all kinda of programming backgrounds
and paradigms you learn to see the value in Python and the
kind of simplicity it has to offer. I will stand by my view
that there are many features of the traditional, strict
and academic features of the OO model that have little
practical value.

Python is a great mix of functional features, OO features
and has borrowed (what I believe) are the best of breed
features from all around.

One thing I find quite amazing is that we're having a discussion
over such low-level features of the OO model (and functional paradigm)
and how Python fits into it all ... And for what exactly ?

Russ - what is your point in all of this - You keep saying you don't have
time to waste with this - yet you keep making this thread grow
longer and longer and longer :)

As far as I'm concerned properties are just fancy functions to
retrieve and set attributes of an object. Consider the following
equivalent pieces of code:

#!/usr/bin/env python

from math import pi

class CircleA(object):

    def __init__(self, radius):
        self._radius = radius
        self._area = pi * radius ** 2

    def __getRadius(self):
        return self._radius

    def __setRadius(self, radius):
        self._radius = radius
        self._area = pi * radius ** 2

    def __getArea(self):
        return self._area

    def __repr__(self):
        return "<Circle r=%0.2f A=%0.2f>" % (self.radius, self.area)

    radius = property(__getRadius, __setRadius)
    area = property(__getArea)

class CircleB(object):

    def __init__(self, radius):
        self.radius = radius
        self.area = pi * radius ** 2

    def setRadius(self, radius):
        self.radius = radius
        self.area = pi * radius ** 2

    def __repr__(self):
        return "<Circle r=%0.2f A=%0.2f>" % (self.radius, self.area)

a = CircleA(1.5)
print a
a.radius = 2.0
print a

b = CircleB(1.5)
print b
b.radius = 2.0
print b

----------

http://codepad.org/tpyGNhrZ

I'll give you a hint which one I prefer :)

cheers
James



More information about the Python-list mailing list