Learn extra at:
class E-book:
'''Object for monitoring bodily books in a group.'''
def __init__(self, identify: str, weight: float, shelf_id:int = 0):
self.identify = identify
self.weight = weight # in grams, for calculating delivery
self.shelf_id = shelf_id
def __repr__(self):
return(f"E-book(identify={self.identify!r},
weight={self.weight!r}, shelf_id={self.shelf_id!r})")
The largest headache right here is that you need to copy every of the arguments handed to __init__
to the thing’s properties. This isn’t so unhealthy in the event you’re solely coping with E-book
, however what when you’ve got further lessons—say, a Bookshelf
, Library
, Warehouse
, and so forth? Plus, typing all that code by hand will increase your possibilities of making a mistake.
Right here’s the identical class applied as a Python dataclass:
from dataclasses import dataclass
@dataclass
class E-book:
'''Object for monitoring bodily books in a group.'''
identify: str
weight: float
shelf_id: int = 0
If you specify properties, referred to as fields, in a dataclass, the @dataclass
decorator mechanically generates all of the code wanted to initialize them. It additionally preserves the sort data for every property, so in the event you use a linting too that checks sort data, it can make sure that you’re supplying the appropriate sorts of variables to the category constructor.