为何自定义UserDict类实例未按__init__方法更新,输出为空字典?
问题原因解析
问题出在__init__方法里的self = {}这一行:
- 在Python类方法中,
self是指向当前实例的局部变量。你在这里把self重新赋值成新的空字典,只是改变了这个局部变量的指向,完全没影响到原本创建的UserDict实例(也就是外部的ud)。 - 后续的
self.update(dict)操作的是你新创建的局部字典,而非类的实例本身。当__init__方法执行完毕,这个局部字典会被销毁,原本的UserDict实例自始至终都没被修改过,所以最后打印ud时输出空字典。
如果要达到预期效果,只需去掉self = {}这一行,直接操作原实例即可:
class UserDict(dict): def __init__(self, dict=None): if dict is not None: self.update(dict) if __name__ == '__main__': myd = {'key1':'value1', 'apple':'fruit', 'tomato':'vegetable'} ud = UserDict(dict=myd) print(ud)
内容的提问来源于stack exchange,提问作者yrnr
相关产品推荐
相关产品推荐

