gpt4 book ai didi

python - __getitem__, __setitem__ 多个键

转载 作者:行者123 更新时间:2023-11-28 16:44:20 25 4
gpt4 key购买 nike

我正在尝试创建一个将数据存储在本地缓冲区中并充当数据库接口(interface)的类。我有以下代码:

class Table(object):    
def __init__(self, tableName, **columnDict):
self.tableName = tableName
self.columns = {}
self.types = {}
self.columns['id'] = []
self.types['id'] = 'INT PRIMARY KEY NOT NULL'
for name in columnDict:
self.columns[name] = []
self.types[name] = columnDict[name]

def updateBufferRow(self, index, updateDict):
for key in updateDict:
self.columns[key][index] = updateDict[key]

def getBufferRow(self, index):
row = {}
for key in self.columns:
row[key] = self.columns[key][index]
return row

def __getitem__(self, key, **args):
""" Allows using self[key] method """
return self.getBufferRow(key)

def __setitem__(self, key, value, **args):
""" Allows using self[key] = value method """
self.updateBufferRow(key, value)

下面是我如何初始化表:

testTable = Table('BestTable', test = 'TestType', test2='INT')

如果我尝试,它会按预期工作:

testTable[0]['test'] = "LALALA"

它什么都不做,另一方面,它更新而不是覆盖表:

testTable[0] = {"test": "LALALA"}

我知道我必须重写 updateBufferRow() 和 getBufferRow() 方法,唯一我不太确定的是如何使用 _getitem_ 和 _setitem_ 方法。

最佳答案

__getitem__ 返回的dict 与您的列不再有任何关系。您需要返回一些可能看起来像 dict 但将 __setattr__ 调用映射回您的表列的内容:

class Row(dict):
def __init__(self, table, index, *args, **kw):
self._table, self._index = table, index
super(Row, self).__init__(*args, **kw)

def __setitem__(self, key, value):
super(Row, self).__setitem__(key, value)
self._table.columns[key][self._index] = value

然后返回它而不是常规的 dict:

def getBufferRow(self, index):
row = {}
for key in self.columns:
row[key] = self.columns[key][index]
return Row(self, index, row)

关于python - __getitem__, __setitem__ 多个键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15417962/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com