Я рефакторинг некоторого кода, который друг написал и недавно наткнулся на эту функцию:
def setup_parameters(self, data):
'''Parse raw data to determine game settings.'''
for line in data.split('\n'):
line = line.strip().lower()
if line:
tokens = line.split()
self.L.debug("tokens: " + str(tokens))
key = tokens[0]
if key == 'cols':
self.width = int(tokens[1])
elif key == 'rows':
self.height = int(tokens[1])
elif key == 'player_seed':
random.seed(int(tokens[1]))
elif key == 'turntime':
self.turntime = int(tokens[1])
elif key == 'loadtime':
self.loadtime = int(tokens[1])
elif key == 'viewradius2':
self.viewradius2 = int(tokens[1])
elif key == 'attackradius2':
self.attackradius2 = int(tokens[1])
elif key == 'spawnradius2':
self.spawnradius2 = int(tokens[1])
Как вы можете видеть, здесь есть неприятный тип оператора switch, который явно требует словарь,Я испытываю желание написать это как словарь классов, так как ключи постоянны, но, поскольку ключи отображаются на атрибуты экземпляра (то есть 'cols': self.width), это не компилируется.
Тогда у меня вопрос: как правильно реорганизовать такой код?