今天,我从“Python算法”一书中学到了一堂课。
class Bunch(dict):
def __init__(self, *args, **kwds):
super(Bunch, self).__init__(*args, **kwds)
self.__dict__ = self但我不太明白第三行是做什么的:
super(Bunch, self).__init__(*args, **kwds)我知道它会调用父类,并执行如下操作:
dict.__init__(self, *args, **kwds)但是我不知道__init__函数对dict做了什么。
我该怎么理解呢?
发布于 2014-07-23 06:06:20
您可以将dict.__init__视为字典构造函数。我可以写:
d = dict(a=1, b=2)或
d = dict([('a', 1), ('b', 2)])两者都创建(初始化)字典{'a': 1, 'b': 2}。每当我编写这两个语句时,它都调用dict.__init__,这就是添加a和b项的工作。
同样,使用Bunch,它会导致所有关键字参数(或可迭代的2-序列)在字典子类(Bunch)中被转换为键值对。
发布于 2014-07-23 06:05:04
您不需要确切地知道dict__init__是干什么的。考虑这个问题的方法是,dict.__init__做必要的事情,使对象“像一个小块一样工作”。通常,在子类中,您需要调用超类__init__来使类“像”它的超类那样工作,而当子类对诸如dict这样的内置类型进行子类分类时也是如此。
https://stackoverflow.com/questions/24902969
复制相似问题