28 lines
645 B
Python
28 lines
645 B
Python
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)
|