我将使用以下方法(我省略了许多方法,例如sort,它们在这种安排中非常有效;还省略了错误处理):
class Table:
def __init__(self, *columns, pkey = None):
self.pkey = pkey
self.__columns = columns
self.__data = {}
def __contains__(self, key):
return key in self.__data
def __iter__(self):
for key in self.__order:
yield key
def __len__(self):
return len(self.__data)
def items(self):
for key in self.__order:
yield key, self.__data[key]
def insert(self, *unnamed, **named):
if len(unnamed) > 0:
row_dict = {}
for column_id, column in enumerate(self.__columns):
row_dict[column] = unnamed[column_id]
else:
row_dict = named
key = row_dict[self.pkey]
self.__data[key] = row_dict
class Subtable(Table):
def __init__(self, table, row_filter):
self.__order = []
self.__data = {}
for key, row in table.items():
if row_filter(row):
self.__data[key] = row
实际上,我只复制主键,并创建对绑定到它们的数据的引用。如果父表中的行被销毁,它仍将存在于子表中。如果在父表中修改了行,则在子表中也会修改该行。这很好,因为我的要求是“修改父表时会发生任何事情”。
如果你看到这个设计有什么问题,请告诉我。