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