Hi, it is not clear whether anything is done to total_cost: def total_cost(self) -> float:
Does this become a property automatically, or is it still a method call? To that end, some examples of *using* a data class, not just defining one, would be helpful. If it remains a normal method, why put it in this example at all? Makes little sense... Otherwise I really like this idea, thanks! On 8 September 2017 at 15: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 > > Will automatically add these methods: > > def __init__(self, name: str, unit_price: float, quantity_on_hand: int = > 0) -> None: > self.name = name > self.unit_price = unit_price > self.quantity_on_hand = quantity_on_hand > def __repr__(self): > return f'InventoryItem(name={self.name!r},unit_price={self.unit_pri > ce!r},quantity_on_hand={self.quantity_on_hand!r})' > 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 > def __ne__(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 > def __lt__(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 > def __le__(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 > def __gt__(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 > def __ge__(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 > > Data Classes saves you from writing and maintaining these functions. > > The PEP is largely complete, but could use some filling out in places. > Comments welcome! > > Eric. > > P.S. I wrote this PEP when I was in my happy place. > > _______________________________________________ > 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/gjcarneir > o%40gmail.com > -- Gustavo J. A. M. Carneiro Gambit Research "The universe is always one step beyond logic." -- Frank Herbert
_______________________________________________ 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