Hey, 

I noticed that writing a class with a classmethod `__eq__`, it does not work as 
expected:

```python
class ANY:
    @classmethod
    def __eq__(cls, other):
        return True

assert ANY == 2   # succeeds
assert ANY == 2   # fails
```

This is, to my understanding, because `ANY == 2`  translates into 
`type(ANY).__eq__(2)`.
However, I think it would be useful to allow user implementation of 
`classmethod` dunder methods that work as expected, or at least put a big 
disclaimer in the documentation. I am not sure how difficult this would be to 
do, but I imagine that `type` could check if the given object/class has a 
classmethod __eq__ and if so use it as a replacement for `type(obj).__eq__`

As a sidenote, I think it would actually be kinda cool to have the `typing.Any` 
behave this way, i.e. always comparing to True.
One example where this would be useful is that it would allow comparisons like

```python
assert mytuple == (Any, "abc")
```

which would then be equivalent, but imo a lot more elegant than

```python
assert len(mytuple) == 2 and mytuple[-1] == "abc"
```

Best regards - Randolf
_______________________________________________
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/L5X2PTDTV3Q5VBJKLBECHRHENVPNHJTU/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to