Constructor overloading
Carl Banks
imbosol at aerojockey.com
Wed Jun 9 13:19:48 EDT 2004
Sergey Krushinsky <lunarium at comail.ru> wrote in message news:<mailman.746.1086771964.6949.python-list at python.org>...
> Hello all,
>
> Is there a common way to emulate constructor overloading in Python class?
>
> For instanse, I have 3 classes:
> 1/ Polar - to hold polar coordinates;
> 2/ Cartesian - to hold cartesian coordinates;
> 3/ Coordinates3D, which holds synchronized instances of the both in
> __p__ and __c__ fields respectively.
>
> I want to design Coordinates3D so that when instantiated with Polar
> argument, self.__p__=argument passed to constructor, and self.__c__ is
> calculated. When argument is Cartesian, self.__c__=argument, and
> self.__p__ is calculated. Runtime type checking works, but maybe there
> is a better way?
Polar and Cartesian could both have methods cart() and polar().
x.cart() would return the cartesian representation whether x is
Cartesian, Polar, or the Coordinates3D. If x is Polar, it makes the
conversion.
x.polar() would do likewise returning polar representation.
Then, to initialize Coordinates3D, it could set _p and _c thusly:
self._p = x.polar()
self._c = x.cart()
This will work regardless of whether x is a Polar or Cartesian. You
should define these methods for Coordinates3D, too. (Note: you
shouldn't use variables of the form __xxx__ for regular variables; see
Naming Conventions at http://www.python.org/peps/pep-0008.html)
OTOH, I could see why you might not want to do that. If the point of
having three separate classes is so that you use a polar as a polar,
then maybe you wouldn't want to have it return a cartesian. If that's
so, then just check the types. It won't kill you.
--
CARL BANKS
More information about the Python-list
mailing list