[Python-Dev] PEP 557: Data Classes

Eric V. Smith eric at trueblade.com
Fri Sep 8 11:01:34 EDT 2017


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.
>


More information about the Python-Dev mailing list