[Python-Dev] PEP 557: Data Classes (original) (raw)
Jonathan Goble jcgoble3 at gmail.com
Fri Sep 8 11:57:40 EDT 2017
- Previous message (by thread): [Python-Dev] PEP 557: Data Classes
- Next message (by thread): [Python-Dev] PEP 557: Data Classes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
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 > unitprice: float > quantityonhand: int = 0 > > def totalcost(self) -> float: > return self.unitprice * self.quantityonhand > > Will automatically add these methods: > > def init(self, name: str, unitprice: float, quantityonhand: int > = 0) -> None: > self.name = name > self.unitprice = unitprice > self.quantityonhand = quantityonhand > def repr(self): > return > f'InventoryItem(name={self.name !r},unitprice={self.unitprice!r},quantityonhand={self.quantityonhand!r})' > > def eq(self, other): > if other.class is self.class: > return (self.name, self.unitprice, self.quantityonhand) == > (other.name, other.unitprice, other.quantityonhand) > return NotImplemented > def ne(self, other): > if other.class is self.class: > return (self.name, self.unitprice, self.quantityonhand) != > (other.name, other.unitprice, other.quantityonhand) > return NotImplemented > def lt(self, other): > if other.class is self.class: > return (self.name, self.unitprice, self.quantityonhand) <_ _> (other.name, other.unitprice, other.quantityonhand) > return NotImplemented > def le(self, other): > if other.class is self.class: > return (self.name, self.unitprice, self.quantityonhand) <=_ _> (other.name, other.unitprice, other.quantityonhand) > return NotImplemented > def gt(self, other): > if other.class is self.class: > return (self.name, self.unitprice, self.quantityonhand) > > (other.name, other.unitprice, other.quantityonhand) > return NotImplemented > def ge(self, other): > if other.class is self.class: > return (self.name, self.unitprice, self.quantityonhand) >= > (other.name, other.unitprice, other.quantityonhand) > 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>
- Previous message (by thread): [Python-Dev] PEP 557: Data Classes
- Next message (by thread): [Python-Dev] PEP 557: Data Classes
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]