Skip to content

Commit ae9d02a

Browse files
committed
ex 7.7
1 parent 4b53dd1 commit ae9d02a

2 files changed

Lines changed: 28 additions & 11 deletions

File tree

Work/stock.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
1-
from sys import settrace
1+
from typedproperty import typedproperty
22

33

44
class Stock:
5-
__slots__ = ("name", "_shares", "price")
5+
name = typedproperty("name", str)
6+
shares = typedproperty("shares", int)
7+
price = typedproperty("price", float)
68

7-
def __init__(self, name: str, shares: int, price: float) -> None:
9+
def __init__(self, name, shares, price) -> None:
810
self.name = name
911
self._shares = shares
1012
self.price = price
@@ -16,15 +18,13 @@ def __repr__(self) -> str:
1618
def cost(self):
1719
return self.shares * self.price
1820

19-
@property
20-
def shares(self):
21-
return self._shares
21+
# @property
22+
# def shares(self):
23+
# return self._shares
2224

23-
@shares.setter
24-
def shares(self, shares):
25-
if not isinstance(shares, int):
26-
raise TypeError("expected an integer")
27-
self._shares = shares
25+
# @shares.setter
26+
# def shares(self, shares):
27+
# self._shares = shares
2828

2929
def sell(self, amount):
3030
if amount <= self.shares:

Work/typedproperty.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
# typedproperty.py
2+
3+
4+
def typedproperty(name, expected_type):
5+
private_name = "_" + name
6+
7+
@property
8+
def prop(self):
9+
return getattr(self, private_name)
10+
11+
@prop.setter
12+
def prop(self, value):
13+
if not isinstance(value, expected_type):
14+
raise TypeError(f"Expected {expected_type}")
15+
setattr(self, private_name, value)
16+
17+
return prop

0 commit comments

Comments
 (0)