如何使用变量“持有”字符串值作为列表名称?

时间:2019-03-26 11:12:55

标签: python-3.x string list variables

我要传递给Class init 的参数之一是带有字符串值的变量。此字符串值是列表的名称。 init 应该使用此字符串值将类对象附加到该列表。我做错了什么?

我尝试使用locals()和globals(),但以“ TypeError:unhashable type:'list'”结尾。也尝试了vars(),也没有用。

refList = []
cmpList = []

class Part(object):
    def __init__(self, origin, name, type, listName):
        self.origin = origin
        self.name = name
        self.type = type
        partListName = locals()[listName]
        partListName.append(self)

#... some file parsing..

part1 = Part((str(origin), str(name) ,str(type), 'refList') 

# ... some other file parsing ...

part2 = Part((str(origin), str(name) ,str(type), 'cmpList')

1 个答案:

答案 0 :(得分:0)

欢迎使用SO Ram!。我认为您应该重新考虑您的代码,因为这不是始终执行此操作的好方法。例如,最好直接传递列表或相关内容。

但是,您的代码问题是您应该使用globals()函数。我真的建议您阅读下一篇文章,以获取有关如何/何时使用Python3的这一有用功能的更多知识。

此外,您必须使用global键盘声明变量,因为您将从Part类中引用此变量。

global refList = []
global cmpList = []

说完所有这些,您的关键代码行应如下所示:

partListName = globals()[listName]