In article <[email protected]>,
Adam Funk <[email protected]> wrote:
> (Warning: this question obviously reflects the fact that I am more
> accustomed to using Java than Python.)
>
> Suppose I'm creating a class that represents a bearing or azimuth,
> created either from a string of traditional bearing notation
> ("N24d30mE") or from a number indicating the angle in degrees as
> usually measured in trigonometry (65.5, measured counter-clockwise
> from the x-axis).
There's two ways to do this.
One would be to have the __init__ method switch on the type of its
argument:
def __init__(self, bearing_or_azimuth):
if isinstance(bearing_or_azimuth, basestring):
# do the bearing thing
else:
# do the azimuth thing
I suspect many people would consider that unpythonic. The other way
would be what, in the C++/Java world, would be called the "named
constructor idiom". Just write two factory functions:
class DirectionIndicatingThingie:
@staticmethod
def from_bearing(cls, bearing):
dit = DirectionIndicatingThingie()
dit.direction = whatever
return dit
and likewise for from_azimuth()
"But!", some C++/Java type bondage addicts might cry, "there's nothing
to prevent somebody from creating a DirectionIndicatingThingie directly,
bypassing the factory functions. There's no way to make the constructor
private!". To which the free-willed pythonistas would respond, "If it
hurts when you do that, don't do that".
--
http://mail.python.org/mailman/listinfo/python-list