Re: [Python-Dev] Second post: PEP 557, Data Classes

2017年11月28日 13:06:05 -0800

On 11/28/2017 1:57 PM, Guido van Rossum wrote:
I would also be happy with a retreat, where we define `__eq__` to insist that the classes are the same, and people can override this to their hearts' content.
I agree. And I guess we could always add it later, if there's a huge demand and someone writes a decent implementation. There would be a slight backwards incompatibility, though. Frankly, I think it would never be needed. One question remains: do we do what attrs does: for `__eq__` and `__ne__` use an exact type match, and for the 4 ordered comparison operators use an isinstance check? On the comparison operators, they also ignore attributes defined on any derived class [0]. As I said, I couldn't find an attrs issue that discusses their choice. I'll ask Hynek over on the dataclasses github issue. Currently the dataclasses code on master uses an exact type match for all 6 methods.
Eric.
[0] That is, they do the following (using dataclasses terms):
Given:
@dataclass
class B:
 i: int
 j: int
@dataclass
class C:
 k: int
Then B.__eq__ is:
def __eq__(self, other):
 if other.__class__ is self.__class__:
 return (other.i, other.j) == (self.i, self.j)
 return NotImplemented
And B.__lt__ is:
def __lt__(self, other):
 if isinstance(other, self.__class__):
 return (other.i, other.j) < (self.i, self.j)
 return NotImplemented
So if you do:
b = B(1, 2)
c = C(1, 2, 3)
Then `B(1, 2) < C(1, 2, 3)` ignores `c.k`.
_______________________________________________
Python-Dev mailing list
[email protected]
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to