【问题标题】: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。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-20
          • 1970-01-01
          • 1970-01-01
          • 2016-09-02
          • 2016-06-05
          相关资源
          最近更新 更多