[Python-Dev] PEP 557: Data Classes
Jonathan Goble
jcgoble3 at gmail.com
Fri Sep 8 11:57:40 EDT 2017
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 <eric at 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 at python.org
> https://mail.python.org/mailman/listinfo/python-dev
> Unsubscribe:
> https://mail.python.org/mailman/options/python-dev/jcgoble3%40gmail.com
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20170908/c0ac2568/attachment.html>
More information about the Python-Dev
mailing list