Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit b208588

Browse files
committed
Exercise 7.9
1 parent 20b7dbf commit b208588

File tree

2 files changed

+25
-11
lines changed

2 files changed

+25
-11
lines changed

Work/stock.py

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
1+
from typedproperty import *
2+
13
class Stock():
2-
__slots__ = ('name', '_shares', 'price')
4+
name = String('name')
5+
shares = Integer('shares')
6+
price = Float('price')
7+
38
def __init__(self, name, shares, price) -> None:
49
self.name = name
510
self.shares = shares
@@ -15,16 +20,6 @@ def sell(self, shares_sold):
1520
def __repr__(self):
1621
return f"Stock('{self.name}', {self.shares}, {self.price})"
1722

18-
@property
19-
def shares(self):
20-
return self._shares
21-
22-
@shares.setter
23-
def shares(self, value):
24-
if not isinstance(value, int):
25-
raise TypeError('Expected int')
26-
self._shares = value
27-
2823

2924
class NewStock(Stock):
3025
def yow(self):

Work/typedproperty.py

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

0 commit comments

Comments
 (0)