[Python-Dev] Second post: PEP 557, Data Classes (original) (raw)

Eric V. Smith eric at trueblade.com
Tue Nov 28 15:56:28 EST 2017


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.



More information about the Python-Dev mailing list