在Python中直接从内置类型继承与从包装类继承

1 投票
3 回答
768 浏览
提问于 2025-04-15 15:35

我现在正在阅读马克·皮尔格林的《深入Python》,刚好看到关于继承的部分。在第5.5节中,皮尔格林提到了从包装类UserDict继承和从内置的dict类型继承之间的区别。

我有点搞不懂,为什么有人会选择使用这个包装类……从UserDict包装类(或者其他的UserXxx类)继承有什么好处呢?

非常感谢你的意见!谢谢!

3 个回答

1

我在你提到的页面上发现了一些关于这个问题的线索:

在Python 2.2之前的版本中,你不能直接从内置的数据类型,比如字符串、列表和字典,去继承(也就是创建一个新的类型)。为了弥补这个限制,Python提供了一些包装类,这些类模仿了这些内置数据类型的行为,比如UserString、UserList和UserDict。通过结合普通方法和特殊方法,UserDict类很好地模拟了字典的功能。而在Python 2.2及以后的版本中,你可以直接从内置的数据类型,比如字典(dict),去继承。

实际上,现在你可能更想直接从dict去继承,而不是UserDict。

3

在Python 3中,包装类被去掉了,因为它们已经不太有用了。混合类,也就是UserDict.DictMixin,情况就完全不同了——它的有用功能现在在collections模块中的“抽象基类”里随处可见(适用于Python 2.6和3.*)。

3

你说得对:

这个类的需求基本上被直接从字典(dict)继承的功能取代了(这个功能从Python 2.2版本开始就有了)。在引入字典之前,UserDict类被用来创建类似字典的子类,这些子类通过重写已有的方法或添加新方法来获得新的行为。

注意第一句话。这段话来自于UserDict的文档

哦,对了,在Python 3中这个类已经不再用了。

撰写回答