我一直在研究一个利用PyQt的项目。在这个项目中,我们正在处理对“模块”的一些更改(我们称之为模块)。其中一些更改将转发到父类中的列表。最重要的部分是这些更改与该列表中的项目一致。
以下是一些代码的小例子,这些代码已经过工作以适应我正在尝试做的事情。
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
类的类都可以访问此列表。
预期结果应该是每次我们添加新模块(由f
和g
给出)时,应记住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'}