mutually exclusive arguments to a constructor

Jason Friedman jason at powerpull.net
Fri Dec 30 16:18:29 EST 2011


> 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).  The class will have methods to return the same
> bearing in various formats.
>
> In Java, I would write two constructors, one taking a single String
> argument and one taking a single Double argument.  But in Python, a
> class can have only one __init__ method, although it can have a lot of
> optional arguments with default values.  What's the correct way to
> deal with a situation like the one I've outlined above?

Similar to other answers already posted:


#!/usr/bin/env python
class azimuth:
    def __init__(self, bearing, heading):
        self.bearing = bearing
        self.heading = heading
        if not bearing:
            self.bearing = 30.5 # or, realistically, a calculation
based on the heading
        if not heading:
            self.heading = "N..." # or, realistically, a calculation
based on the bearing
    @staticmethod
    def getBearingInstance(bearing):
        return azimuth(bearing, None)
    @staticmethod
    def getHeadingInstance(heading):
        return azimuth(None, heading)

azimuth1 = azimuth.getBearingInstance("N24d30mE")
print azimuth1.heading

azimuth2 = azimuth.getHeadingInstance(30)
print azimuth2.bearing



More information about the Python-list mailing list