__getitem__, __setitem__ 多个键

2024-01-31

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

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_ and _setitem_ 方法。


The dict由您返回__getitem__与您的专栏不再有任何关系。您需要返回一些可能看起来像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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

__getitem__, __setitem__ 多个键 的相关文章

  • 在python中发送多个文件

    我是 python 新手 我正在尝试以下操作 我有两个 calsess Server py and Client py我想将服务器目录中存在的所有文件发送到客户端的某个目录 IE C ServerDir file1 txt C Server
  • 如何从 QLineEdit 动态获取文本? [关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 怎样才能得到String Text from QlineEdit 我尝试过像这样 myArea getList 功能是获取字符串值并使用字符
  • 窗口多维 Tensorflow 数据集

    我有形状的二维数据m by n我想要的窗口大小w沿着第一个轴进入数据集m w许多二维数组 每个数组的大小w by n 例如如果数据是 0 1 2 3 4 5 6 7 8 9 10 11 然后我想将其窗口化 0 1 2 3 4 5 6 7 8
  • 如何使用 eval dataframe 方法在自定义函数中返回 numpy 数组或列表?

    我正在使用 python 3 X 我正在尝试使用eval https pandas pydata org pandas docs stable generated pandas eval html pandas eval数据框方法 包括这样
  • Matplotlib 颤抖比例

    我正在尝试使用 matplotlib 和 quiver 函数绘制一些箭头 但我想使用数组单独选择每个箭头的长度 http matplotlib sourceforge net api pyplot api html matplotlib p
  • Django 和 VirtualEnv 开发/部署最佳实践

    只是好奇人们如何结合 virtualenv 部署 Django 项目 更具体地说 如何使生产虚拟环境与开发计算机正确同步 我使用 git 进行 scm 但 git 存储库中没有 virtualenv 我应该这样做 还是最好使用 pip fr
  • 为什么我的查询在参数化后会中断?

    我有 2 张桌子 Sales and Product Sales可以将产品存储为Idn or Name 传统设计 和Type列指定实际type与之相关 Product等是连接的子集表into这个表来获取真实的数据 在这个例子中 Produc
  • Python Ctypes:将返回的 C 数组转换为 python 列表,无需 numpy

    我正在使用 Python Ctypes 来访问一些 C 库 我连接到的函数之一返回const double 它实际上是一个双精度数组 当我在Python中得到结果时 如何将该数组转换为Python列表 C函数的签名 const double
  • 为什么 Contextmanager 会抛出运行时错误“生成器在 throw() 之后没有停止”?

    在我的 utility py 中 contextmanager def rate limit protection max tries 3 wait 300 tries 0 while max tries gt tries try yiel
  • 从另一个类添加 Swing 组件

    我正在学习java 我正在尝试从另一个类向我的框架添加一个菜单栏 练习将代码划分为多个类以更好地组织程序 这是我的代码示例 public class MainApp public static void main String args C
  • 从可变长度字符串中解析值的最佳方法是什么?

    假设我有一个由可变长度的逗号分隔的整数字符串 分割字符串并用值更新变量 如果存在 的最佳方法是什么 目前 我有以下内容 a b c 10 10 1 default values mylist int x for x in input spl
  • TensorFlow 运算符重载

    有什么区别 tf add x y and x y 在 TensorFlow 中 当您使用以下命令构建图表时 您的计算图表会有什么不同 代替tf add 更一般地说 有 或者其他张量超载的操作 如果至少有一个x or y is a tf Te
  • 优化 Django Queryset for 循环

    如何优化以下查询集 link goal for link in self child links all 我想摆脱 for 循环并只访问数据库一次 我有以下代码 class Goal models Model name models Cha
  • ModuleNotFoundError:没有名为“pandas.io.formats.csvs”的模块

    我正在尝试创建一个简单的 csv dataframe to csv psv file name encoding utf 8 header True sep doublequote True quoting csv QUOTE ALL in
  • 如何定期向数组添加新元素,使其出现在每 500 个元素之后?

    如果我有一个包含 500k 个元素 仅限数字 的数组 列 我如何能够在每 500 个元素之后添加一个新元素 新的数字应该是相邻元素的平均值 例如 在元素 499 和 500 之间有一个值为 499 的值 500 的值 2 的新元素 依此类推
  • BeautifulSoup - 抓取论坛页面

    我正在尝试抓取论坛讨论并将其导出为 csv 文件 其中包含 线程标题 用户 和 帖子 等行 其中后者是每个人的实际论坛帖子 我是 Python 和 BeautifulSoup 的初学者 所以我对此感到非常困难 我当前的问题是 csv 文件中
  • 在Python中,如何将“datetime”对象转换为秒?

    我有一堆日期时间对象 我想计算每个对象自过去固定时间以来的秒数 例如自 1970 年 1 月 1 日以来 import datetime t datetime datetime 2009 10 21 0 0 这似乎只是区分具有不同日期的日期
  • 如何将当前登录的用户指定为模型字段的默认值?

    我想做这样的事情 class Task models Model created by models ForeignKey User default LoggedInUser blank True null True related nam
  • PDB.run - 重新启动 pdb 会话

    我对 python 和 pdb 比较陌生 但我对 gdb 有很多经验 我的问题是 如果我在代码中设置了多个断点 我会想要更改一些内容并重新运行我的调试会话并保留这些断点 但是 在我的 pdb 会话中输入 run 会导致我的会话终止并显示以下
  • Python Pandas 系列失败日期时间

    我认为这一定是 pandas 的失败 有一个 pandas 系列 v 18 1 和 19 如果我为该系列分配一个日期 第一次将其添加为 int 错误 第二次将其添加为 int 错误 添加为日期时间 正确 我无法理解原因 例如使用以下代码 i

随机推荐

  • “反向”统计:根据平均值和标准差生成数据

    拥有数据集并从中计算统计数据很容易 反过来又如何呢 假设我知道某个变量具有平均值 X 标准差 Y 并假设它具有正态 高斯 分布 生成适合分布的 随机 数据集 任意大小 的最佳方法是什么 编辑 这种发展自这个问题 https stackove
  • 使用 std::function 进行隐式转换[重复]

    这个问题在这里已经有答案了 可能的重复 为什么我的 C 编译器无法推导出 boost 函数的模板参数 https stackoverflow com questions 5871044 why cant my c compiler dedu
  • 如何使用 git repack -a -d --深度=250 --window=250

    我见过git gc aggressive prune and git repack a d depth 250 window 250建议用于减小不需要较长本地历史记录的本地 git 文件夹的大小 从我的阅读看来git repack是首选 有
  • 在maven多模块包中创建JAR文件作为聚合

    我有以下架构 现在 如果我正在创建父子关系并首先构建子项 然后构建父项 那么它会正常工作
  • 如何从 Java 9 中的另一个模块获取 ResourceBundle?

    我有两个模块 模块 a 和模块 b 模块 a 具有属性文件 com foo texts en properties 模块 a 导出com foo包裹 在 module b 中我想获取这个资源 为此 我在 module b 中执行以下操作 M
  • 仅使某一部分可滚动,而不是整个页面

    我正在开发一个项目 其中一个部分通过从数据库请求数据来填充元素 因此其中的元素数量变化很大 棘手的部分是 我们的设计基于这样的想法 不必在页面上滚动 而是在必要时在部分上滚动 我想用overflow在这些部分就足够了 但它没有给我预期的结果
  • 分割视图控制器不作为根视图控制器

    我有一个应用程序需要用户LOG IN 用户登录后 我想使用分割视图控制器来显示数据 诀窍是 苹果不希望我推动SplitViewController 因为他们希望它成为根视图控制器 从我的角度来看 这是可以的 但我需要用户先登录 任何人都知道
  • 如何在 QtCreator 中重命名文件 .h .cpp

    如何在QtCreator中重命名源文件 我已经更改了类的名称 但我没有看到更改它包含的文件的选项 我使用的是2 7 0版本 如果您使用 qmake 重命名很容易 在 项目 左侧面板中找到您的文件 然后在上下文菜单中选择 重命名 Qt Cre
  • Visual Studio 在字符类中查找并替换右方括号 ]

    我想创建一个否定字符类来匹配像这样的方括号标签 方括号标签 问题是 字符结束了字符类 I tried 但当我运行它时出现语法错误 这是在查找和替换正则表达式引擎中 它与标准 NET 引擎略有不同 仅供参考 您忘记转义最后的结束括号
  • 使用奇怪的命名空间序列化 XML?

    问题 用于序列化此 XML 内容的类看起来如何
  • 导航栏大标题到小标题切换不流畅 iOS 13,粘性

    我有一个UINavigationController默认值为navigationBar prefersLargeTitles true 我将其切换为false when I push进入一个新场景 我们称之为 DetailsViewCont
  • 为什么使用 DFS 而不是 BFS 来查找图中的循环

    DFS 主要用于查找图中的循环 而不是 BFS 有什么理由吗 两者都可以查找节点是否已经存在 遍历树 图时访问过 深度优先搜索比广度优先搜索更节省内存 因为您可以更快地回溯 如果使用调用堆栈 实现起来也更容易 但这依赖于不会溢出堆栈的最长路
  • 登录 Twitter 后如何获取 oauth 令牌?

    登录 Twitter 后 我可以打印一些有用的数据 例如用户名和用户 ID 但是 OAuth 令牌始终为空 我怎样才能得到它 我需要将 OAuth 令牌发送到我的服务器 以便它可以验证用户确实是他所说的人 ACAccountStore ac
  • 使用 jQuery 淡入淡出背景图像?

    到目前为止 我已经尝试了很多方法 但没有成功 有任何想法吗 您可以淡化背景颜色 但不能淡化背景图像 解决这个问题的方法是将你的图像设置为 img 标签并默认隐藏它们display none 给出你的图像position absolute a
  • Outlook 邮件项目作为流

    是否可以退货MailItem直接作为Stream MailItem from Microsoft Office Interop Outlook 现在我找到了一个临时解决方案 首先保存一个MailItem到一个目录 打开它并将流返回到文件 然
  • 在 matlab 中,如何放大脚本中的绘图

    我想使用脚本放大情节 我只对水平约束缩放感兴趣 所以我想做一些类似的事情 p plot myData z zoom set z ZoomInToPoints 50 100 or p plot myData myZoom 50 100 因此
  • Qt:设置QMainWindow的大小

    我是Qt新手 所以我想知道是否有办法设置a的大小QMainWindow 例如 用户桌面的 70 我尝试了拉伸因子 但没有用 QWidget setFixedSize我认为有效 但仅限于像素数 在 QMainWindow 构造函数中的某个位置
  • Protractor - Jasmine - 将文件下载到相对路径

    我已阅读并遵循以下问题及其评论 答案 问题1 https stackoverflow com questions 27785731 cant stop protractor from displaying file download pro
  • 从 Python 文档字符串自动生成 GitHub Wiki 文档

    标题说明了一切 我的想法是为我的所有模块 类和函数提供文档字符串 并以某种方式通过 github wiki 很好地导航文档 此外 该文档应与最新代码同步 这意味着它应在推送时更新 重新生成 那可能吗 只需通过管道传输生成的输出docstri
  • __getitem__, __setitem__ 多个键

    我正在尝试创建一个类 它将数据存储在本地缓冲区中 并充当数据库的接口 我有以下代码 class Table object def init self tableName columnDict self tableName tableName