from structly import * class Stock(Structure): _types = () name = String() shares = PositiveInteger() price = PositiveFloat() @property def cost(self): return self.shares * self.price def sell(self, nshares: PositiveInteger): self.shares -= nshares @classmethod def from_row(cls, row): rowdata = [func(val) for func, val in zip(cls._types, row)] return cls(*rowdata) if __name__ == '__main__': portfolio = read_csv_as_instances('Data/portfolio.csv', Stock) formatter = create_formatter('text') print_table(portfolio, ['name', 'shares', 'price'], formatter)