On 8 September 2017 at 07:57, Eric V. Smith <e...@trueblade.com> wrote: > I've written a PEP for what might be thought of as "mutable namedtuples with > defaults, but not inheriting tuple's behavior" (a mouthful, but it sounded > simpler when I first thought of it). It's heavily influenced by the attrs > project. It uses PEP 526 type annotations to define fields. From the > overview section: > > @dataclass > class InventoryItem: > name: str > unit_price: float > quantity_on_hand: int = 0 > > def total_cost(self) -> float: > return self.unit_price * self.quantity_on_hand
Very nice! > def __eq__(self, other): > if other.__class__ is self.__class__: > return (self.name, self.unit_price, self.quantity_on_hand) == > (other.name, other.unit_price, other.quantity_on_hand) > return NotImplemented My one technical question about the PEP relates to the use of an exact type check in the comparison methods, rather than "isinstance(other, self.__class__)". I think I agree with that decision, but it isn't immediately obvious that the class identity is considered part of the instance value for a data class, so if you do: @dataclass class BaseItem: value: Any class DerivedItem: pass Then instances of DerivedItem *won't* be considered equivalent to instances of BaseItem, and they also won't be orderable relative to each other, even though "DerivedItem" doesn't actually add any new data fields. Cheers, Nick. -- Nick Coghlan | ncogh...@gmail.com | Brisbane, Australia _______________________________________________ Python-Dev mailing list Python-Dev@python.org https://mail.python.org/mailman/listinfo/python-dev Unsubscribe: https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com