You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何调用重载方法的原始实现?自定义字典类场景

解决方案

要实现继承dict且强制使用get()/set()、禁止[]存取的类,核心是在自定义的get()和set()方法里绕过自己重载的__getitem__/__setitem__,直接调用父类dict的原始方法。

实现代码

class MyPackage(dict):
    def __getitem__(self, key):
        raise NotImplementedError("请使用get()方法访问元素")
    
    def __setitem__(self, key, value):
        raise NotImplementedError("请使用set()方法设置元素")
    
    def get(self, key, default=None):
        # 直接调用dict的原始取值逻辑,绕过自定义的__getitem__
        try:
            return dict.__getitem__(self, key)
        except KeyError:
            return default
    
    def set(self, key, value):
        # 直接调用dict的原始赋值逻辑,绕过自定义的__setitem__
        dict.__setitem__(self, key, value)

测试验证

a = MyPackage()
a.set('x', 'wow')
print(a.get('x'))  # 输出: wow
print(a.get('y', 'default'))  # 输出: default

# 以下操作会触发错误,符合预期
# a['x'] = 'test'  # 抛出NotImplementedError
# print(a['x'])     # 抛出NotImplementedError

原理说明

Python中,直接通过dict.__方法名__(self, 参数)的方式调用父类方法,不会触发子类重载的同名方法。这样既保留了dict的底层存储能力,又能通过重载__getitem__/__setitem__阻止外部用[]存取,同时让自定义的get()/set()正常工作。

内容的提问来源于stack exchange,提问作者LiamF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 15:12:15