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

继承dict的子类初始化后为空,如何实现预期功能?

解决继承dict后初始化实例为空的问题

你的问题核心在于__init__方法中对self的错误赋值:在Python类的方法里,self是方法的局部参数,重新赋值它只会改变这个局部变量的指向,完全不会修改原本创建的类实例。所以你原来的代码里,虽然给深拷贝后的dict加了bar键,但真正的my_dict实例根本没被初始化,最终打印出来就是空字典。

下面是两种可行的实现方式:

方法一:先处理数据再调用父类初始化

先把原始字典深拷贝并添加自定义键值对,再让父类dict用处理好的数据初始化当前实例:

import copy
class my_dict(dict):
    def __init__(self, raw_dict):
        processed = copy.deepcopy(raw_dict)
        processed['bar'] = raw_dict['foo']
        super().__init__(processed)

方法二:先初始化父类再修改实例

先调用父类的__init__完成实例的基础初始化,再直接给当前实例添加新的键值对:

import copy
class my_dict(dict):
    def __init__(self, raw_dict):
        super().__init__(copy.deepcopy(raw_dict))
        self['bar'] = raw_dict['foo']

测试效果

运行以下代码:

original = {'foo' : 'apple'}
alfa = my_dict(original)
print(alfa)

会得到预期输出:

{'foo': 'apple', 'bar': 'apple'}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 02:44:56