I have two dataclasses, Route
and Factors
. Route
contains a value and three copies of Factors
.
Route
does not know how many variables Factors
contains. I want to get the name of these variables, and then get the respective value of each one, for each copy of Factors
.
Here is what I currently have:
@dataclass
class Factors:
do: bool # does it do the route
hub: int # how many of the locations are hubs
def __init__(self, do_init):
self.do = do_init
self.hub = 0 # will add later
def __str__(self):
return "%s" % self.do
@dataclass
class Route:
route: tuple
skyteam: Factors
star: Factors
oneworld: Factors
def __init__(self, route):
self.route = route.get('route')
# this could probably be done with one line loop and a variable with names
self.skyteam = Factors(route.get('skyteam'))
self.star = Factors(route.get('star'))
self.oneworld = Factors(route.get('oneworld'))
def __str__(self):
table = [[self.route, "SkyTeam", "StarAlliance", "OneWorld"]] # var name is fine
for var in Factors.__dict__.get('__annotations__').keys(): # for each factor
factor = [var]
factor.append(self.skyteam.__dict__.get(var))
factor.append(self.star.__dict__.get(var))
factor.append(self.oneworld.__dict__.get(var))
table.append(factor)
return tabulate.tabulate(table, tablefmt='plain')
Input is
{'route': ('BOS', 'DXB'), 'skyteam': True, 'star': True, 'oneworld': True}
Current output is
('BOS', 'DXB') SkyTeam StarAlliance OneWorld
do True True True
hub 0 0 0
Maybe I could search Route
for each variable that contains a Factors
datatype and iterate over those?
tabulate
to support data classes as rows. – Eradis