From a6043beb93ca7b952ae990f19e51ce15a33e62e0 Mon Sep 17 00:00:00 2001 From: Mike Bloy Date: Sun, 26 Nov 2023 18:19:22 -0600 Subject: [PATCH] ex5.4 --- typedproperty.py | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 typedproperty.py diff --git a/typedproperty.py b/typedproperty.py new file mode 100644 index 0000000..fa555e6 --- /dev/null +++ b/typedproperty.py @@ -0,0 +1,41 @@ +def typedproperty(name, expected_type): + private_name = "_" + 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 + + +def String(name): + return typedproperty(name, str) + + +def Integer(name): + return typedproperty(name, int) + + +def Float(name): + return typedproperty(name, float) + + +if __name__ == "__main__": + + class Stock: + name = String("name") + shares = Integer("shares") + price = Float("price") + + def __init__(self, name, shares, price): + self.name = name + self.shares = shares + self.price = price + + print(Stock)