This issue tracker has been migrated to GitHub, and is currently read-only.
For more information, see the GitHub FAQs in the Python's Developer Guide.

Author wolma
Recipients mark.dickinson, paul.moore, wolma
Date 2015-04-20.13:05:02
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1429535102.45.0.921141053852.issue23975@psf.upfronthosting.co.za>
In-reply-to
Content
> Is it not reasonable to simply say that implementations of numbers.Rational which allow the numerator and denominator to have types for which true division doesn't return a float, have to provide their own implementation of __float__()?

Unfortunately, the Rational type cannot always know what its numerator or denominator supports.
Look at fractions.Fraction: its only requirement for numerator and denominator is that they both should be Rational instances.
So a hypothetical MyInt like Mark describes it could be perfectly acceptable for Fraction except that it would fail to convert it to float.
 
> It's certainly less convenient, and probably surprising for users, but the alternative is trying to work around broken integer types - after all numbers.Complex.__truediv__ says "Should promote to float when necessary" in the docstring, which to me says that a type where a/b doesn't return a float doesn't conform to the numeric tower.
> 

I do read this docstring differently. To me, it means should promote to float if there is no other way to express the result (like when your custom type system does not define its own Float type).
It would, in fact, be really bad for custom type implementors if they would be forced to leave their type system when doing divisions.

> Alternatively, return int(self.numerator) / int(self.denominator). After all, a fraction whose numerator can't be represented as a Python (unlimited precision) integer is a pretty odd sort of fraction...

The problem here is that self.numerator and/or self.denominator could both be Rational instances again, which are not expressible as a Python integer and, thus, are not enforced to provide __int__ by the numbers ABC.
History
Date User Action Args
2015-04-20 13:05:02wolmasetrecipients: + wolma, paul.moore, mark.dickinson
2015-04-20 13:05:02wolmasetmessageid: <1429535102.45.0.921141053852.issue23975@psf.upfronthosting.co.za>
2015-04-20 13:05:02wolmalinkissue23975 messages
2015-04-20 13:05:02wolmacreate