почему классы-оболочки НЕ наследуют базовые типы данных? - PullRequest
1 голос
/ 08 июля 2011

Я искал источник класса 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 ]

5 голосов
/ 08 июля 2011

Потому что они старше, чем способность наследовать от основных типов данных. Их изменение может привести к поломке существующих программ различными способами.

4 голосов
/ 08 июля 2011

До Python 2.2 вы не могли создать подкласс dict. UserDict существует только для обратной совместимости.

См. http://docs.python.org/library/userdict.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...