Как использовать переменную, «содержащую» строковое значение в качестве имени списка? - PullRequest
1 голос
/ 26 марта 2019

Одним из параметров, которые я хочу передать в класс 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 голосов
/ 26 марта 2019

Добро пожаловать в SO Ram! Я думаю, вы должны переосмыслить свой код, потому что это не очень хороший подход, чтобы делать это всегда.Например, лучше передать непосредственно список или что-то связанное.

Однако ваша проблема с кодом заключается в том, что вы должны использовать функцию globals().Я действительно рекомендую вам прочитать следующий пост, чтобы получить больше информации о том, как / когда использовать эту полезную функциональность Python3.

Кроме того, вы должны объявить свои переменные с помощью global keywoard, потому что вы собираетесь ссылаться на этопеременные из вашего Part класса.

global refList = []
global cmpList = []

Сказав все это, ваша критическая строка кода должна выглядеть следующим образом:

partListName = globals()[listName]
...