继承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
相关产品推荐
相关产品推荐

