我目前正在阅读Mark Pilgrim 的Dive Into Python,并已进入继承部分。在5.5 节中,Pilgrim 提到了从包装类 UserDict 继承与从内置 dict 类型继承之间的区别。
我很难理解为什么有人会打扰包装类......从 UserDict 包装类(或任何其他 UserXxx 类)继承有什么好处?
非常感谢您的意见。谢谢!
我目前正在阅读Mark Pilgrim 的Dive Into Python,并已进入继承部分。在5.5 节中,Pilgrim 提到了从包装类 UserDict 继承与从内置 dict 类型继承之间的区别。
我很难理解为什么有人会打扰包装类......从 UserDict 包装类(或任何其他 UserXxx 类)继承有什么好处?
非常感谢您的意见。谢谢!
你是对的:
对此类的需求在很大程度上已被直接从 dict 子类化的能力所取代(该功能从 Python 2.2 版开始可用)。在引入 dict 之前,UserDict 类用于创建类似字典的子类,这些子类通过覆盖现有方法或添加新方法来获得新行为。
注意第一句话。这来自 UserDict 的文档。
哦,在 Python 3 中它消失了。
包装类已从 Python 3 中删除,因为它们已经有一段时间没那么有用了。mixin类是一个完全不同的UserDict.DictMixin
故事——它的有用特性现在遍布collections
模块中的“抽象基类”(Python 2.6 和 3.*)。
我在您链接到的页面上发现了有关答案的提示:
在 2.2 之前的 Python 版本中,您不能直接子类化内置数据类型,如字符串、列表和字典。为了弥补这一点,Python 提供了模仿这些内置数据类型行为的包装类:UserString、UserList 和 UserDict。UserDict 类结合使用普通方法和特殊方法,可以很好地模仿字典。在 Python 2.2 及更高版本中,您可以直接从 dict 等内置数据类型继承类。
实际上,今天您可能想要子类 dict,而不是 UserDict。