This commit is contained in:
Mike Bloy 2023-10-28 17:02:47 -05:00
parent 0e72736371
commit 1618e42cbb

View File

@ -1,10 +1,6 @@
import csv
from Decimal import Decimal
class Stock: class Stock:
types = (str, int, float) _types = (str, int, float)
__slots__ = ["name", "_shares", "_price"]
def __init__(self, name, shares, price): def __init__(self, name, shares, price):
self.name = name self.name = name
@ -13,12 +9,37 @@ class Stock:
@classmethod @classmethod
def from_row(cls, row): def from_row(cls, row):
values = [func(val) for func, val in zip(cls.types, row)] values = [func(val) for func, val in zip(cls._types, row)]
return cls(*values) return cls(*values)
@property
def cost(self): def cost(self):
return self.shares * self.price return self.shares * self.price
@property
def shares(self):
return self._shares
@shares.setter
def shares(self, value):
if not isinstance(value, self._types[1]):
raise TypeError("Expected int")
if value < 0:
raise ValueError("Expected positive integer")
self._shares = value
@property
def price(self):
return self._price
@price.setter
def price(self, value):
if not isinstance(value, self._types[2]):
raise TypeError("Expected float")
if value < 0.0:
raise ValueError("Expected positive float")
self._price = value
def sell(self, num): def sell(self, num):
self.shares -= num self.shares -= num
if self.shares < 0: if self.shares < 0: