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

Vai*_*pai 1 python design-patterns

我正在看UserDict班级来源,我有点不安地看到:

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

然后方法如:

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()  
Run Code Online (Sandbox Code Playgroud)

这样做会不会更好:

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

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

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

Ign*_*ams 5

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