代码之家  ›  专栏  ›  技术社区  ›  gruszczy

python:继承还是合成

  •  15
  • gruszczy  · 技术社区  · 14 年前

    假设我有 class dict 口述 口述 添加一些我可能需要的属性和方法。这是一个好方法,还是我应该坚持作文?

    4 回复  |  直到 14 年前
        1
  •  14
  •   Philippe Beaudoin    14 年前

    继承权经常被滥用。除非你的类是用来作为一个通用字典与额外的功能,我会说,组成是一个方向。

    保存转发呼叫通常不是选择继承的充分理由。

    喜欢对象组合而不是类继承

    理想情况下,你不应该创造 实现新组件的重用。你呢 应该可以得到所有的 组装所需的功能 通过对象的现有组件 案例,因为 成分从来都不够丰富 使制造新组件更容易 可以用旧的组成。 所以一起工作。

    然而,我们的经验是 通过 更多地取决于对象组成。”

    http://blog.platinumsolutions.com/node/129

        2
  •  3
  •   jathanism    14 年前

    你真的需要权衡一下你要做的事情的成本和范围。继承自 dict 因为您希望类似字典的行为快速而简单,但容易受到限制,例如导致从类创建的对象不可损坏。

    例如,如果您需要序列化(即。 pickle )对象,但也需要类似字典的行为,那么显然您不能直接从 口述 你需要将你想要实现的部分功能组合起来。

        3
  •  3
  •   Daniel Newby    14 年前

    isinstance(my_object, dict) 返回True还是False?换句话说,如果你不小心把其中一个东西给了想要 dict ,它是否应该愉快地尝试将其用作 口述 ? 可能不会,所以用构图。

        4
  •  3
  •   Community pid    4 年前

    Dive into Python has a very relevant example .

    使用构图。

    class FileInfo(dict):                  
       "store file metadata"
       def __init__(self, filename=None): 
           self["name"] = filename
    
    1. 由于UserDict在内部的工作方式,它要求您手动调用其 __init__ dict 不是这样工作的;它不是包装纸,而且 它不需要显式初始化 .