A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from http://mail.python.org/pipermail/python-dev/attachments/20180321/690d1b39/attachment.html below:

<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On 14 March 2018 at 08:29, Tim Peters <span dir="ltr"><<a href="mailto:tim.peters@gmail.com" target="_blank">tim.peters@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">[Tim]<br>
<span class="">>> An obvious way to extend it is for Fraction() to look for a special<br>
>> method too, say "_as_integer_ratio()".<br>
<br>
</span>[Greg Ewing]<br>
> Why not __as_integer_ratio__?<br>
<br>
Because. at this point, that would be beating a dead horse ;-)<br></blockquote><div><br></div><div>I'm not so sure about that, as if we define a protocol method for it, then we'd presumably also define an "operator.as_integer_ratio" function, and that function could check __index__ in addition to checking the new protocol method.<br><br></div><div>For example:<br><br></div><div>    def as_integer_ratio(n):<br></div><div>        # Automatically accept true integers<br></div><div>        if hasattr(n, "__index__"):<br></div><div>            return (n.__index__(), 1)<br></div><div><div><div>        # New reserved protocol method<br></div><div></div>        if hasattr(n, "__integer_ratio__"):<br></div><div>            return n.__integer_ratio__()<br></div><div><div><div>        # Historical public protocol method<br></div><div></div>        if hasattr(n, "as_integer_ratio"):<br></div><div>            return n.as_integer_ratio()<br></div><div>        # Check for lossless integer conversion<br></div><div>        try:<br></div><div>            int_n = int(n)<br></div><div>        except TypeError:<br></div><div>            pass<br></div><div>        else:<br></div><div>            if int_n == n:<br></div><div>                return (int_n, 1)<br></div><div></div>        raise TypeError(f"{type(n)} does not support conversion to an integer ratio")<br><br></div><div>Similarly, on the "operator.is_integer" front:<br><br><div>    def is_integer(n):<br></div><div>        # Automatically accept true integers<br></div><div>        if hasattr(n, "__index__"):<br></div><div>            return True<br></div><div><div><div>        # New reserved protocol method<br></div><div></div>        if hasattr(n, "__is_integer__"):<br></div><div>            return n.__is_integer__()<br></div><div><div><div>        # Historical public protocol method<br></div><div></div>        if hasattr(n, "is_integer"):<br></div><div>            return n.is_integer()<br></div><div>        # As a last resort, check for lossless int conversion<br></div><div></div>        return int(n) == n<br></div></div><br></div><div>Cheers,<br></div><div>Nick.<br><br></div><div>P.S. I've suggested "operator" as a possible location, since that's where we put "operator.index", and it's a low level module that doesn't bring in any transitive dependencies. However, putting these protocol wrappers somewhere else (e.g. in "math" or "numbers") may also make sense.<br clear="all"></div></div></div><br>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Nick Coghlan   |   <a href="mailto:ncoghlan@gmail.com" target="_blank">ncoghlan@gmail.com</a>   |   Brisbane, Australia</div>
</div></div>

RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4