Polymorphism using constructors

Carl Banks pavlovevidence at gmail.com
Mon Mar 3 17:03:35 EST 2008


On Mar 3, 4:17 pm, Raymond Hettinger <pyt... at rcn.com> wrote:
> Since Python doesn't support having two methods with the same name,
> the usual solution is to provide alternative constructors using
> classmethod():
>
>   @classmethod
>   def from_decimal(cls, d)
>         sign, digits, exp = d.as_tuple()
>         digits = int(''.join(map(str, digits)))
>         if sign:
>             digits = -digits
>         if exp >= 0:
>             return cls(digits * 10 ** exp)
>         return cls(digits, 10 ** -exp)


Note that even some of Python's built in types (dict *cough*)
implement homemade function overloading.

The OP wanted to write a constructor that could accept either a pair
of integers or a rational, there would be a good precedent for it.

However, I would advise the OP to use the constructor only for the
most common arguments, and use classmethods for more obscure, less
common arguments (such as decimal or even float).


Carl Banks



More information about the Python-list mailing list