我正在读一本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
有些问题:
最诚挚的问候,
答案 0 :(得分:4)
*args
表示:收集此列表中没有名称的所有额外参数:
def x(a, *args): pass
x(1, 2, 3)
指定a=1
和args=[2,3]
。
**kwargs
为dict
kawrgs
分配带名称的所有额外参数:
def x(a, **kw): pass
x(1, b=2, c=3)
指定a=1
和kw={b=2, c=3}
。
代码super(Bunch, self).__init__(*args, **kwds)
读取:使用实例__init__
和参数Bunch
调用self
的方法*args, **kwds
。这是初始化超类(docs for super
)
是的,dict
是built-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。