Le 30/11/2012 22:23, Aaron Meurer a �crit :
> It's worth pointing out that Float does the same thing, if you give it a
> high enough precision. Try Float(3.2, 100) for example.
>
> To me, it should just work. Yes, we should encourage the use of strings
> over float literals, but Rational(float) not working makes it seem as if
> the conversion is not supported, which is not true at all.
There are two things that bite us again and again: constructors that do
too much and polymorphic functions resulting from the conglomeration of
several simple functions under the same name. Here, both apply.
So I suggest a more radical change to the constructor: it should only
accept the two-argument form, and "rat = Rational(p, q)" should have the
following post-conditions:
assert isinstance(rat, Rational)
assert rat.p == p
assert rat.q == q
Everything else it currently does should in separate functions or
(class)methods.