In article <g6k1t8xg0a....@news.ducksburg.com>, Adam Funk <a24...@ducksburg.com> 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