[Edu-sig] re: Does edu-sig extend to Jython
Arthur
ajs@ix.netcom.com
Sun, 18 Aug 2002 15:45:18 -0400
Patrick writes -
> Could you post an actual code example of what you are trying to
accomplish?
> If so, we might be able to come up with some alternatives. But I can't
think
> of a solution without having a bit more detail to think about.
Well say I have a Point class which basically defines a drawing method,
and keyword args like "color", and
"pointsize" to control appearance.
I am working in 3d space.
A point defined as an intersection can be defined - let's say -
by a plane and a line (or a line and a plane) or two lines
(if the lines are coplanar).
Where I am now in Python is two separate classes:
PlaneIntersection(plane, line, **kw) #argument order therefore significant
and
LineIntersection(line,line,**kw)
In Java, Intesection will behave on the basis of the signature of
constructor:
I can do something significantly more verbose, but effectively
akin to:
Intersection(Point):
def __init__(*args,**kws):
Point.__init__(**kw)
(initialize class attributes here)
def update(self):
(test for existence of intersection
and update position of point here)
and so where
"plane" is a Plane instance
"line" is a Line instance
Intersection(plane,line)
Intesection(line,plane)
Intersection(line,line)
could all work appropriately without too much todo.
Now I think I understand it is mostly Python's dynamic
nature that makes this kind of facility difficult (impossible?)
to implement as a built_in language feature.
And I think I understand the possiblities, at least in general,
of a lot of isinstance or type testing of *args - but its ugly, and
error-prone - at least, that is, up until the point at which the rest of
the design is sufficiently stabilized so that I know
*exactly* what it is I want to be testing for and am not
expecting any more changes to be coming down the pike.
Seems to be the nature of my approach, that I never quite get
to that point.
So, I am beginning to try to digest the meaning and significance
of "multimethods" - for which there are Python modules.
I guess then my question, which I am pursuing, is what are
multimethods, and how might they relate to the issue I am
trying to deal with?
Art