当我扩展具有**kwargs
的父类时,我无法在kwargs
中编写super(ParentClass, self).__init__(args, kwargs)
。为什么会这样?
代码如下: 最初我认为以下是正确的,但事实并非如此。
class Parent(object):
def __init__(self, *args, **kwargs):
pass
class Child(Parent):
def __init__(self, *args, **kwargs):
super(Child, self).__init__(args, kwargs)
事实上,正好在我测试之后。
class Parent(object):
def __init__(self, *args, **kwargs):
pass
class Child(Parent):
def __init__(self, *args, **kwargs):
super(Child, self).__init__(*args, **kwargs)
当我们引用*args
,**kwargs
这样的arg时,我们通常会直接使用args
,kwargs
。为什么在我写__init__
时,我不能这样做?
答案 0 :(得分:0)
您需要使用
class Child(Parent):
def __init__(self, *args, **kwargs):
super(Child, self).__init__(*args, **kwargs)
为了解开kwargs(和args)
你的第二个问题是init的第一个参数应该是self
,它就是实例。
当您执行super(Child, self).something
时,您基本上说我们在父实例上调用something
。
执行__init__(*args, **args)
时,第一个参数是实例(在您的情况下为args[0]
)。因此super(Child, self).__init__(*args[1:], **kwargs)
会有效,但使用self
会更好(更好),并且它会起作用。