Interesting. I note that this under "Specification": """ field's may optionally specify a default value, using normal Python syntax:
@dataclass class C: int a # 'a' has no default value int b = 0 # assign a default value for 'b' """ ...does not look like "normal Python syntax". On Fri, Sep 8, 2017 at 11:44 AM Eric V. Smith <e...@trueblade.com> wrote: > Oops, I forgot the link. It should show up shortly at > https://www.python.org/dev/peps/pep-0557/. > > Eric. > > On 9/8/17 7:57 AM, Eric V. Smith 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_price!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/jcgoble3%40gmail.com >
_______________________________________________ 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