[Python-Dev] PEP 557: Data Classes
Gustavo Carneiro
gjcarneiro at gmail.com
Sat Sep 9 11:41:34 EDT 2017
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 <eric at 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 at 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/python-dev/attachments/20170909/090c117c/attachment.html>
More information about the Python-Dev
mailing list