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