当前位置: 首页 > article >正文

Python可变映射类型MutableMapping

Python自定义字典类型MutableMapping

  • 什么是 MutableMapping
  • MutableMapping 的基本方法
  • 实现 MutableMapping
  • 常见应用场景

什么是 MutableMapping

MutableMapping 是 Python collections.abc 模块中的一个抽象基类,它定义了一个可变映射对象的最小接口。可变映射指的是可以进行增、删、改操作的映射类型,如 Python 的内置字典(dict)。如果要创建一个具有字典功能的自定义类,可以继承 MutableMapping,然后实现其中的一些核心方法。

MutableMapping 的基本方法

MutableMapping 要求至少实现以下五个方法:

  1. getitem(self, key):通过键访问值(如 mydict[key])。
  2. setitem(self, key, value):将键和值关联(如 mydict[key] = value)。
  3. delitem(self, key):删除给定键的键值对(如 del mydict[key])。
  4. iter(self):返回一个可迭代对象,用于遍历字典的键。
  5. len(self):返回字典中的键值对数量(如 len(mydict))。

此外,MutableMapping 还提供了一些已经实现的方法,例如 get(), keys(), values(), items() 等,方便在继承时直接使用。

实现 MutableMapping

通过一个简单的例子来看如何实现一个继承 MutableMapping 的自定义字典类。在这个例子中,将实现一个 “记录访问顺序的字典” 类,每次访问某个键时,会将其移动到字典的末尾。

from collections.abc import MutableMapping

class OrderedAccessDict(MutableMapping):
    def __init__(self, *args, **kwargs):
        self._store = dict()
        self._order = []  # 用于记录访问顺序
        self.update(dict(*args, **kwargs))  # 将初始值传递给字典

    def __getitem__(self, key):
        # 每次访问键时,将该键移到访问顺序的末尾
        if key in self._store:
            self._order.remove(key)
            self._order.append(key)
        return self._store[key]

    def __setitem__(self, key, value):
        if key not in self._store:
            self._order.append(key)
        self._store[key] = value

    def __delitem__(self, key):
        if key in self._store:
            self._order.remove(key)
        del self._store[key]

    def __iter__(self):
        return iter(self._order)

    def __len__(self):
        return len(self._store)

    def __repr__(self):
        return f"{self.__class__.__name__}({self._store})"

# 使用示例
ordered_dict = OrderedAccessDict(a=1, b=2, c=3)
print(ordered_dict)  # OrderedAccessDict({'a': 1, 'b': 2, 'c': 3})

# 访问 'a',它会被移动到末尾
print(ordered_dict['a'])
print(list(ordered_dict))  # ['b', 'c', 'a']

# 插入一个新键 'd'
ordered_dict['d'] = 4
print(list(ordered_dict))  # ['b', 'c', 'a', 'd']

解释:

  • self._store: 用于存储键值对的实际字典。 self._order: 一个列表,用于记录键的访问顺序。
  • getitem: 每次访问某个键时,我们会将该键移动到 self._order 的末尾。
  • setitem: 在插入一个新键时,将其添加到访问顺序列表中。
  • delitem: 删除键时,同时从存储和访问顺序列表中移除它。
  • iter: 返回一个迭代器,按访问顺序遍历键。

常见应用场景

  1. 缓存系统
    在实现缓存机制时,我们通常需要记录每个缓存项的使用情况,以便在缓存容量达到上限时淘汰最少使用的项。通过继承 MutableMapping,可以轻松创建一个类似于 LRU(最近最少使用)缓存的类。

  2. 数据库连接池
    在一些应用中,管理数据库连接池时,我们可能希望每次访问或使用连接时,记录其使用顺序,从而管理活跃连接的数量。

  3. 自定义配置类
    在某些配置系统中,我们希望将配置值存储在类似字典的对象中,并根据不同的访问顺序、权限或其他逻辑处理访问和修改操作。


http://www.kler.cn/news/340223.html

相关文章:

  • 单细胞转录组 —— Cell Ranger 原始数据处理
  • 【深度学习基础模型】极限学习机(Extreme Learning Machines, ELM)详细理解并附实现代码。
  • 进程的状态的理解(概念+Linux)
  • 手搓一个Eval#Datawhale组队学习大模型任务Task4
  • 问卷的二维码怎么做?教你一招快速在线制作表单二维码
  • 【基于YOLOv5的反光衣检测预警系统】可检测图片、视频、摄像头,支持GPU加速检测以及语音播报预警
  • PHP函数 strstr() 和 stristr() 有什么区别
  • 反应香精市场报告:预计2030年全球市场规模将达到264.3亿美元
  • 遇到 MySQL 中的两个 Root 用户:问题分析与解决
  • fiddler抓包18-2_导出jmeter、postman脚本(带请求头)
  • springboot宿舍管理-计算机毕业设计源码40740
  • Linux安装elasticsearch单机版
  • ai写作,五款软件助你快速写作!
  • 分治算法(6)_归并排序_交易逆序对的总数
  • 灵芝玉叶膏简介
  • 影刀RPA实战:Excel密码与字典功能指令
  • InfoGAN:通过信息最大化生成对抗网络进行可解释的表示学习
  • React 插入不转义的html
  • Python 语法及入门(超全超详细)!
  • nacos多数据源插件介绍以及使用