【问题标题】:Inheriting directly from a built-in type versus its wrapper class in Python直接从内置类型继承与其在 Python 中的包装类
【发布时间】:2010-12-12 04:10:27
【问题描述】:
我目前正在阅读 Mark Pilgrim 的 Dive Into Python,并已进入继承部分。在section 5.5 中,Pilgrim 提到了从包装类 UserDict 继承与从内置 dict 类型继承之间的区别。
我很难理解为什么有人会为包装类而烦恼...从 UserDict 包装类(或任何其他 UserXxx 类)继承有什么好处?
非常感谢您的意见。谢谢!
【问题讨论】:
标签:
python
inheritance
types
wrapper
built-in
【解决方案1】:
你是对的:
对这个类的需求已经
很大程度上被能力所取代
直接从 dict 子类(一个特征
开始可用
Python 2.2 版)。在...之前
dict,UserDict的介绍
类用于创建
类似字典的子类
通过覆盖获得新的行为
现有方法或添加新方法。
注意第一句话。这来自 UserDict 的documentation。
哦,在 Python 3 中它已经消失了。
【解决方案2】:
包装类已从 Python 3 中删除,因为它们已经有一段时间没那么有用了。 mixin 类UserDict.DictMixin 是一个完全不同的故事——它的有用特性现在遍布collections 模块(Python 2.6 和 3.*)中的“抽象基类”中。 .
【解决方案3】:
我在您链接到的页面上发现了一个关于答案的提示:
在 2.2 之前的 Python 版本中,
你不能直接子类化
内置数据类型,如字符串,
列表和字典。补偿
为此,Python 带有包装器
模仿行为的类
这些内置数据类型:UserString,
用户列表和用户字典。用一个
普通与特殊的结合
方法,UserDict 类执行
出色的字典模仿。
在 Python 2.2 及更高版本中,您可以
直接从内置继承类
像dict这样的数据类型。
实际上,今天您可能想要子类 dict,而不是 UserDict。