怀疑Python代码

时间:2011-03-04 10:49:19

标签: python algorithm

我正在读一本Python中的算法书,我也是Python的新手。

我无法理解这个例子:

class Bunch(dict):
    def __init__(self, *args, **kwds):
        super(Bunch, self).__init__(*args, **kwds)
        self.__dict__ = self

x = Bunch(name="Jayne Cobb", position="Public Relations")
print x.name

有些问题:

  • 参数“args”和“kwds”中*和**的含义是什么?
  • “super”是什么意思?
  • 在这个问题上,我们正在扩展“dict”课程?这是一个内置类?

最诚挚的问候,

3 个答案:

答案 0 :(得分:4)

*args表示:收集此列表中没有名称的所有额外参数:

def x(a, *args): pass
x(1, 2, 3)

指定a=1args=[2,3]

**kwargsdict kawrgs分配带名称的所有额外参数:

def x(a, **kw): pass
x(1, b=2, c=3)

指定a=1kw={b=2, c=3}

代码super(Bunch, self).__init__(*args, **kwds)读取:使用实例__init__和参数Bunch调用self的方法*args, **kwds。这是初始化超类(docs for super

的标准模式

是的,dictbuilt-in data type for dictionaries

答案 1 :(得分:3)

答案 2 :(得分:2)

  

在这个问题上,我们正在扩展“dict”课程?这是一个内置类?

您实际上正在扩展基座dict class。这是Python中的本机类。在以前的Python版本中,您无法扩展本机类,但已使用new-style classes进行了更改。

  

“超级”是什么意思?

函数super lets you find给定类的父级,使用与继承相同的顺序。

  

参数“args”和“kwds”中*和**的含义是什么?

*args扩展为包含非命名参数的元组,而**kwargs扩展为包含命名参数的字典。使用可变数量的参数来管理函数是a way