我该如何理解Python中的“Bunch类”?

1 投票
2 回答
5664 浏览
提问于 2025-04-18 14:24

今天我从《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__,它负责把 ab 这两个项目添加到字典里。

同样地,使用 Bunch 时,它会把所有的关键字参数(或者一个包含两个元素的可迭代对象)转换成字典子类(Bunch)中的键值对。

撰写回答