为什么python中主要使用类型/类统一

为什么python中主要使用类型/类统一,python,class,types,new-style-class,Python,Class,Types,New Style Class,我是一个相当普通的python程序员,我以前没有用python做过非常复杂或任何主要的应用程序。。。我在阅读新的类样式时,遇到了一些非常新的东西,我理解这些东西,即数据类型和类的统一 class defaultdict(dict): def __init__(self, default=None): dict.__init__(self) self.default = default def __getitem__(self, key):

我是一个相当普通的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

但真正让我困惑的是他们为什么要统一他们。。。我实在想不出有什么理由使它如此重要。。如果有人能解释一下,我会很高兴的。谢谢你。主要原因是允许以用户创建类的方式对内置类型进行子类化。在创建新样式的类之前,要创建类似dict的类,您需要从专门设计的UserDict类中生成子类,或者生成一个提供完整dict协议的自定义类。现在,您只需执行类mySpecialDict:并重写要修改的方法

有关详细信息,请参阅

例如,下面是一个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:


您如何通过mydict向dict添加值,并让它记录添加,而不必让add-value向dict了解log-value?

您所说的统一是什么意思?如单位。。。例如,创建用户定义的数据类型有什么好处@user3271483:有哪些替代方案?@Blender要做什么,请给我一个需要用户定义类型的任务的示例?@user3271483:如果不将dict子类化,您将如何定义defaultdict?这对您有多大帮助,先生?您不需要传递它来向dict添加值。。做了我的口述。。。然后log\u valuemydict,'testkey','testvalue'对不起,log\u value不应该做加法,因为它只是一个记录器。问题仍然存在:如何记录一个单独函数对dict的添加?为什么这两个函数彼此不认识。。。因为您已经在代码中回答了这个问题?这不是一个了解松耦合好处的地方。你要求回答,结果得到了。如果你不需要使用它,不要。否则,你就会陷入迂腐或低沉的状态。
def log_value(d, key, value):
    log('Updated: {}={}'.format(key, value))

mydict = dict()