如何让列表中的项目与对象相对应?

时间:2018-03-05 15:42:44

标签: python list

我一直在研究一个利用PyQt的项目。在这个项目中,我们正在处理对“模块”的一些更改(我们称之为模块)。其中一些更改将转发到父类中的列表。最重要的部分是这些更改与该列表中的项目一致。

36568444-47afedf0-17e7-11e8-8ae9-775cadd54d66

以下是一些代码的小例子,这些代码已经过工作以适应我正在尝试做的事情。

class Module:
    some_list = []

    def setList(self, _list, _item):
        try:
            _list[_list.index(_item)] = _item
        except:
            _list.append(_item)


class someUI(Module):
    index = 0
    def __init__(self):
        super().__init__()

    def setList(self, _list, _item):
        super().setList(_list, _item)


f = someUI()
g = someUI()
f.setList(f.some_list, 'item1')
g.setList(g.some_list, 'item2')

正如您所看到的,我添加了一个列表some_list,任何扩展Module类的类都可以访问此列表。 预期结果应该是每次我们添加新模块(由fg给出)时,应记住some_list中的相应空格。

换句话说,当添加新的“模块”时,应将新空格添加到some_list。每当编辑“模块”时,我们只需要更改some_list中的相应项。 例如:如果我弄乱f,那么相应的位置some_list[0]应该是事情发生变化的唯一地方。如果我弄乱g,那么相应的位置some_list[1]应该是事情发生变化的唯一地方。但是,如果some_list[0]中没有任何内容,那么我们将要创建它。正如您所看到的,setList是尝试这样做的。

当我们添加新项目和类时,这应该保持一致。基本上,我们希望将some_list的索引和每个新对象的实例化绑定在一起。

class anotherUI(Module):
     ...

h = anotherUI()
h.setList(h.some_list, 'item3')

在搞了一点之后,我发现我可以用字典来做我想问的事。

class Module:
    some_list = {}

    def setItem(self, name, item):
        self.some_list[name] = item


class someUI(Module):
    index = -1

    def __init__(self):
        super().__init__()
        someUI.index += 1
        self.curr_count = someUI.index

    def setItem(self, _item, **kwargs):
        super().setItem(self.curr_count, _item)


f = someUI()
g = someUI()
f.setItem('item1')
g.setItem('item2')
f.setItem('item3')
Output: 
{0: 'item3', 1: 'item2'}

然而,出现了一个新问题。如何添加新类,并让它识别出它不应该覆盖字典中的项目?

class anotherUI(Module):
     ...

h = anotherUI()
h.setList('item3')

Output
{0: 'item3', 1: 'item2', 2: 'item3'}

0 个答案:

没有答案