This commit is contained in:
Mike Bloy 2023-11-18 15:41:12 -06:00
parent ac8b8f95a5
commit 530cba6953
2 changed files with 25 additions and 22 deletions

12
descrip.py Normal file
View File

@ -0,0 +1,12 @@
class Descriptor:
def __init__(self, name):
self.name = name
def __get__(self, instance, cls):
print(f"{self.name}:__get__")
def __set__(self, instance, value):
print(f"{self.name}:__set__ {value}")
def __delete__(self, instance):
print(f"{self.name}:__delete__")

View File

@ -1,8 +1,17 @@
class Validator:
def __init__(self, name=None):
self.name = name
@classmethod
def check(cls, value):
return value
def __set__(self, instance, value):
instance.__dict__[self.name] = self.check(value)
def __set_name__(self, cls, name):
self.name = name
class Typed(Validator):
expected_type = object
@ -55,8 +64,9 @@ class NonEmptyString(String, NonEmpty):
class Stock:
_types = (str, int, float)
__slots__ = ["name", "_shares", "_price"]
name = String()
shares = PositiveInteger()
price = PositiveFloat()
def __init__(self, name, shares, price):
self.name = name
@ -77,31 +87,12 @@ class Stock:
@classmethod
def from_row(cls, row):
values = [func(val) for func, val in zip(cls._types, row)]
return cls(*values)
return cls(*row)
@property
def cost(self):
return self.shares * self.price
@property
def shares(self):
return self._shares
@shares.setter
def shares(self, value):
PositiveInteger.check(value)
self._shares = value
@property
def price(self):
return self._price
@price.setter
def price(self, value):
PositiveFloat.check(value)
self._price = value
def sell(self, num):
self.shares -= num
if self.shares < 0: