-1

我是一个相当普通的python程序员,我之前没有用python做过非常复杂或任何主要的应用程序......我正在阅读新的类样式并且遇到了一些非常新的东西给我,我理解它们是数据类型和类统一

class defaultdict(dict):

    def __init__(self, default=None):
       dict.__init__(self)
       self.default = default

   def __getitem__(self, key):
       try:
           return dict.__getitem__(self, key)
       except KeyError:
           return self.default

但真正让我困惑的是他们为什么要统一它们?...我真的无法想象有什么理由让它变得如此重要..如果有人能对此有所了解,我会很高兴,谢谢

4

1 回答 1

2

主要原因是允许以与用户创建的类相同的方式对内置类型进行子类化。在新式类之前,要创建一个类似dict的类,您需要从一个专门设计的类中继承子UserDict类,或者生成一个提供完整dict协议的自定义类。现在,您可以执行class MySpecialDict(dict):并覆盖您要修改的方法。

有关完整纲要,请参阅PEP 252 - 使类型看起来更像类

例如,这是一个dict记录对其修改的子类:

def log(msg):
    ...

class LoggingDict(dict):
    def __setitem__(self, key, value):
        super(LoggingDict, self).__setitem__(key, value)
        log('Updated: {}={}'.format(key, value))

的任何实例都LoggingDict可以在任何需要常规dict的地方使用:

def add_value_to_dict(d, key, value):
    d[key] = value

logging_dict = LoggingDict()

add_value_to_dict(logging_dict, 'testkey', 'testvalue')

如果您改为使用函数而不是LoggingDict

def log_value(d, key, value):
    log('Updated: {}={}'.format(key, value))

mydict = dict()

您将如何传递mydictadd_value_to_dict让它记录添加不必add_value_to_dict知道log_value

于 2014-03-17T01:54:49.767 回答