875 B
875 B
Exercise 5.4 - Solution
# typedproperty.py
def typedproperty(name, expected_type):
= '_' + name
private_name
@property
def value(self):
return getattr(self, private_name)
@value.setter
def value(self, val):
if not isinstance(val, expected_type):
raise TypeError(f'Expected {expected_type}')
setattr(self, private_name, val)
return value
= lambda name: typedproperty(name, str)
String = lambda name: typedproperty(name, int)
Integer = lambda name: typedproperty(name, float)
Float
# Example
if __name__ == '__main__':
class Stock:
= String('name')
name = Integer('shares')
shares = Float('price')
price def __init__(self, name, shares, price):
self.name = name
self.shares = shares
self.price = price