为什么包装类不继承基本数据类型?

时间:2011-07-08 04:27:50

标签: python design-patterns

我正在查看UserDict类来源,我有点不安地看到:

class UserDict:
  def __init__(self, dict=None, **kwargs):
    self.data = {}
    if dict is not None:
      self.update(dict)
    ...

然后是方法:

def keys(self): return self.data.keys()
def items(self): return self.data.items()
def iteritems(self): return self.data.iteritems()
def iterkeys(self): return self.data.iterkeys()
def itervalues(self): return self.data.itervalues()
def values(self): return self.data.values()  

这样做不是更好:

class UserDict(dict):
  def __init__(self, dict=None, **kwargs):
    #self.data = {}                            # now self itself is {}
    if dict is not None:
      self.update(dict)
    ...

然后对上述方法的需求就会消失。

此外,它还有助于程序员在一开始就学习UserDict通过查看类定义本身来扩展dict的功能。

2 个答案:

答案 0 :(得分:5)

因为它们比从基本数据类型继承的能力更旧。修改它们可能会以各种方式破坏现有程序。

答案 1 :(得分:4)

在Python 2.2之前,你无法继承dictUserDict仅用于向后兼容。

请参阅http://docs.python.org/library/userdict.html