文档说了个啥
文档 好像说了什么但没完全说,特别是这句,对这个类的需求已部分由直接创建 dict 的子类的功能所替代;不过,这个类处理起来更容易,因为底层的字典可以作为属性来访问。 前半句告诉我们这个类用处不大,后半句告诉我们它还有点用但是我对其中的因果关系感到疑惑,底层的字典作为属性为什么会容易处理,dict 里底层的字典不也可以随便拿到吗?
总结一下,这块文档编辑者是个谜语人。(谜语人能不能guna~)
懂哥说了个啥
谷歌输入 how to use collections.UserDict,SO里相关的提问不多且都在多年之前,答案更是良莠不齐。有的说UserDict好久没更新啦不要用啦直接继承dict就完事,有的说继承Userdict的子类的实例用isinstance(o, dict)判断返回False这是不好的巴拉巴拉(这不是废话吗,UserDict都不是dict的子类)。当然也有真正的懂哥,像 这个问题 的最后一个回答,不过没人顶我是没想到的,所以我一开始也没看到呜呜呜。
百度输入 python userdict,你会浪费你人生中的300秒。也不是,我造谣了,历经千辛万苦我在 知乎这篇文章 下面的评论找到了方向,是的,《Fluent Python》 我来了!
书上说了个啥
Chapter 3: Dictionaries and Sets 里 Subclassing UserDict 小节讲到:
The main reason why it’s preferable to subclass from UserDict rather than from dict
is that the built-in has some implementation shortcuts that end up forcing us to override
methods that we can just inherit from UserDict with no problems.3
点击注脚跳到第十二章,开幕雷击: Subclassing Built-In Types Is Tricky
讲的比较清楚了,dddd,如果还要我总结一下就是
重写内置方法就继承collections.User*类,不然就直接继承内置类。
好了xdm,现在你也是二择的神了!