2011-03-04 41 views
2

我正在阅读一本Python中的算法书,我也是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”是什么意思?
  • 在这个类别中,我们正在扩展“字典”类吗?这是一个内置的类?

最好的问候,

+7

*和参数“args”和“kwds”中的**?在Python语言参考中定义。 super在Python语言参考中定义。 dict在Python库手册中定义。你为什么不先阅读这些文件? – 2011-03-04 10:55:12

+1

@S。洛特:+1尽管lang参考对新手来说不是很平易近人。 – 2011-03-04 11:02:35

+0

@Aaron Digulla:“郎参照对新手来说不是很平易近人”。我没有发现这是真的。我在问一个非常具体的问题。 “你为什么不先真正阅读这些文件?”我希望找出为什么有人不会尝试先阅读。 – 2011-03-04 11:17:08

回答

4

*args的意思是:收集所有的额外参数没有名字在这份名单:

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

分配a=1args=[2,3]

**kwargs有名称的所有额外的参数分配给dictkawrgs

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

分配a=1kw={b=2, c=3}

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

是的,dict是一个built-in data type for dictionaries

+0

接近直角,除了在你的第二个例子,它抛出一个错误类型错误:X()得到了关键字参数“A” – 2011-03-04 11:15:02

+0

谢谢你的*解释和** – 2011-03-04 11:15:34

+0

第二个例子作品有“X(多值1,B = 2,c = 3)“ – 2011-03-04 11:26:03

2

In this classe we are extending the "dict" class? This is a built-in class?

你实际上是扩展基本dictclass。这是一个Python中的本地类。在以前的Python版本中,你不能扩展本地类,但是已经改变了new-style classes

What is the meaning of "super"?

功能superlets you find给定类的家长,使用它会被用于继承顺序相同。

What is the meaning of the * and the ** in the parameters "args" and "kwds"?

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