[Tutor] Prevent "Coder's Remorse"?
Danny Yoo
dyoo at hkn.eecs.berkeley.edu
Wed Sep 28 20:37:34 CEST 2005
On Wed, 28 Sep 2005, Ron Phillips wrote:
> Maybe it's just me. I am always haunted by "coder's remorse" (the
> certainty that there's a more compact, beautiful, fun, maintainable way
> to code anything I finish.)
>
> At any rate, I am currently working on a script to model an ordered
> collection of geographic points, all of which must share the same
> collection of attributes. So, a little collection might be:
>
> pointList = [
> {lat:40.123,lon:-81.456,
> 'attributes':{'msg':'example','beavers':34, 'distance':18.132}
> },
> {lat:40.12345,lon:-81.45678,
> 'attributes':{'msg':'','beavers':0, 'distance':0.0}
> }
> ]
Hi Ron,
You may want to change the data structure.
Rather than have points all be peers, reorganize them so that there's some
kind of hierarchy: that'll help you directly represent the "sharing" of
attributes. Explicitly:
#########################################################
class Point:
def __init__(self, lat, lon, atts, parent=None):
(self.lat, self.lon, self.atts, self.parent) = (
lat, long, atts, parent)
def lookup(self, name):
if name in self.atts:
return self.atts[name]
if self.parent:
return self.parent.lookup(name)
raise KeyError
#########################################################
The idea here is that we impose some structure among the points. We can
keep a central Point that has a set of child points within its satellite.
######
>>> centralPoint = Point(40, -81, {})
>>> satellitePoint = Point(40, -81, {}, centralPoint)
######
Once we formalize this hierarchical relationship --- satellitePoint's
"parent" is centralPoint --- then we can test out how attribute lookup and
sharing might work:
######
>>> satellitePoint = Point(40, -81, {}, centralPoint)
>>> centralPoint.atts['color'] = 'purple'
>>> satellitePoint.lookup('color')
'purple'
######
Does this make sense?
More information about the Tutor
mailing list