我有一个包含几个列表的类,即:
class my_class(object):
def __init__(self, list_A, list_B, ..., list_Z):
self.list_A = list_A
(...)
self.list_Z = list_Z
然后我需要一个方法将一个元素附加到其中一个列表。我现在所做的就是来自C:
的 switch casedef add_to_list(self, list_name, item):
if list_name == 'A':
self.list_A.append(item)
elif list_name == 'B':
self.list_B.append(item)
(...) and so on
它非常无效,如果我想改变一些东西,需要做很多工作。 有没有办法缩短它?我想象类似于 string.format():
的东西self.list_{}.append(item) .format(list_name)
答案 0 :(得分:4)
不要围绕变量名构建程序逻辑。请指定一个项目必须满足的条件才能分类到特定列表。 如果是简单的字母顺序,只需在代码中表达即可。
示例:
class my_class():
def __init__(self):
self.list_A = []
self.list_B = []
self.dict = { "A":self.list_A, "B":self.list_B }
def add_to_list(self, key):
# Logic in here
self.dict.get(key[:1]).append(key)
if __name__ == "__main__":
c = my_class()
c.add_to_list("Apple")
c.add_to_list("Bus")
c.add_to_list("Airplane")
print(c.dict["A"])
print(c.dict["B"])
答案 1 :(得分:2)
使用getattr
访问属性
def append(self, list_name, item):
getattr(self, 'list_%s' % list_name).append(item)