This commit is contained in:
Mike Bloy 2023-12-10 10:28:49 -06:00
parent 6f9b537d22
commit 617e409052
2 changed files with 12 additions and 5 deletions

View File

@ -4,6 +4,9 @@ from structure import Structure
class Stock(Structure): class Stock(Structure):
_fields = ('name', 'shares', 'price') _fields = ('name', 'shares', 'price')
def __init__(self, name, shares, price):
self._init()
@property @property
def cost(self): def cost(self):
return self.shares * self.price return self.shares * self.price

View File

@ -1,11 +1,15 @@
import sys
class Structure: class Structure:
_fields = () _fields = ()
def __init__(self, *args): @staticmethod
if len(args) != len(self._fields): def _init():
raise TypeError(f'Expected {len(self._fields)} arguments') locs = sys._getframe(1).f_locals
for pos, field in enumerate(self._fields): self = locs.pop('self')
setattr(self, field, args[pos]) for name, val in locs.items():
setattr(self, name, val)
def __repr__(self): def __repr__(self):
args = map(lambda field: f"{field}={getattr(self, field)!r}", self._fields) args = map(lambda field: f"{field}={getattr(self, field)!r}", self._fields)