我该如何理解Python中的“Bunch类”?
今天我从《Python算法》这本书里学到了一个Bunch类。
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__这个函数对字典做了什么。
我应该怎么理解这个呢?
2 个回答
1
你不需要完全了解 dict__init__
是干什么的。可以这样理解:dict.__init__
是为了让这个对象“像字典一样工作”。一般来说,当你创建一个子类时,需要调用父类的 __init__
方法,这样这个类才能“像”它的父类那样工作,对于像字典这样的内置类型也是一样的。
4
你可以把 dict.__init__
想象成字典的构造器。比如,我可以这样写:
d = dict(a=1, b=2)
或者
d = dict([('a', 1), ('b', 2)])
这两种写法都会创建(初始化)一个字典 {'a': 1, 'b': 2}
。每当我写这两行代码时,实际上是在调用 dict.__init__
,它负责把 a
和 b
这两个项目添加到字典里。
同样地,使用 Bunch
时,它会把所有的关键字参数(或者一个包含两个元素的可迭代对象)转换成字典子类(Bunch
)中的键值对。