我正在重构一个朋友写的一些代码,最近偶然发现了这个函数:
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”):自身宽度)这无法编译。在
我的问题是,重构这些代码的正确方法是什么?在
将键映射到属性的名称,并使用
setattr(self, attribute_name, int(tokens[1])
来设置值。E、 g.:您可以构建一个字典,其中的键作为访问器,lambda函数为每个键执行代码。在
用以下操作设置dict
然后:
^{pr2}$相关问题 更多 >
编程相关推荐