我有一个包含原始数据实例列表的数据管理器类。我还有一个GUI类,其中包含每个实例的GUI元素。当事件发生时,我需要将GUI列表与原始列表同步。
我觉得对此有一个更好、更优雅的解决方案,而不是遍历两个列表来添加()和删除()特定的实例。
编辑:示例案例如下
class Foo:
def __init__(self, name='default'):
self.name = name
def __repr__(self):
return self.name
a = Foo(name='a')
b = Foo(name='b')
c = Foo(name='c')
d = Foo(name='d')
l_original = [a, b]
l_synced = [a, b, c]
在这种情况下,我想要一个算法,确保l_synced与l_original 相同,而不需要设置l_synced = l_original。
发布于 2019-05-24 02:56:35
我会在GUI模型中留下一个对数据实例的引用。然后,当事件发生时,我会遍历所有图形用户界面实例,并使用它们对真实数据实例的引用在所述数据实例上调用相关的方法,如delete()
,modify()
等。我还会传递对某种Factory()
类的引用,该类可以创建数据模型的新实例到负责添加元素的图形用户界面元素。
发布于 2019-05-24 03:19:37
用于确保l_synced
与l_original
相同而不设置l_synced = l_original的示例。它使用append和remove。我希望它能帮助你。
class Foo:
def __init__(self, name='default'):
self.name = name
def __repr__(self):
return self.name
a = Foo(name='a')
b = Foo(name='b')
c = Foo(name='c')
d = Foo(name='d')
l_original = [a, b]
l_synced = [a, b, c]
print("Before")
print("Original: %s" % l_original)
print("Synced: %s" % l_synced)
for sync_obj in l_synced:
if sync_obj in l_original:
print("%s in l_original" % sync_obj)
else:
print("%s NOT in l_original. Remove it." % sync_obj)
l_synced.remove(sync_obj)
for orig_obj in l_original:
if orig_obj in l_synced:
print("%s in l_synced" % orig_obj)
else:
print("%s NOT in l_synced. Append it." % orig_obj)
l_synced.sppend(orig_obj)
print("After")
print("Original: %s" % l_original)
print("Synced: %s" % l_synced)
输出:
>>>python loop.py
Before
Original: [a, b]
Synced: [a, b, c]
a in l_original
b in l_original
c NOT in l_original. Remove it.
a in l_synced
b in l_synced
After
Original: [a, b]
Synced: [a, b]
https://stackoverflow.com/questions/56280731
复制相似问题