I understand that Python itself should work with classes with any sort of
crazy semantics, and I appreciate your spelling it out. We could say that
the bar for the Python implementation is the highest, since who knows what
experimental == someone might cook up playing around, and you would like
the underlying Python layers to hold up correctly no matter what.

Now I chose the lines from the Python modules as just a random source of
PEP8 compliant code, but I think I confused my message there, which was
about "regular" not Python implementation code.

Here is my proposal:
>
> Add the following parenthetical to the mandatory-is rule: (this rule
> is optional for code that is not part of an implementation of Python).
>

So if I have a line like this

    if x == None:

and this is in a Python program that is using regular old Python classes
like int and list and dict and whatever. It is not importing a class with
weird == semantics. We would agree, that == is going to work perfectly in
that case. My code is relying on the == of the classes it uses, and that is
sensible.

Or perhaps my proposal should have been "It's permissible to use == in
cases where it works correctly."

Is PEP8 well served to forbid using == in cases where it works perfectly?

Best,

Nick


On Mon, Aug 30, 2021 at 3:42 PM Carl Meyer <c...@oddbird.net> wrote:

> Hi Nick,
>
> On Mon, Aug 30, 2021 at 4:25 PM Nick Parlante <n...@cs.stanford.edu>
> wrote:
> > I don't know Chris, doesn't this just show that If you construct a class
> with a, shall we say, "oddball" definition of ==, then using == on that
> class gets oddball results. And it goes without saying that we all
> understand that None and False and True (the dominant cases where PEP8 is
> forcing "is") will always have sensible definitions of ==.
>
> If you have `if x == None:`, you don't only have to care about whether
> `None` has an "oddball" definition of ==, you also have to care about
> whether the type of `x` does! Since in many of these cases `x` is
> something passed in from outside the function, you may not have any
> idea about or control over its type. That's why people are telling you
> that almost all the occurrences you've found would in fact be unsafe
> if changed from `is` to `==`, and it's very rare that you can
> "eyeball" a particular case and declare confidently that it would be
> fine to switch it from `is` to `==`.
>
> Carl
>
_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/MOXN4E4YFARUGLGTPMNMRPFZJQE4TSP2/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to