为什么我不能使用** kwargs

时间:2014-10-11 08:47:04

标签: python extends

当我扩展具有**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时,我们通常会直接使用argskwargs。为什么在我写__init__时,我不能这样做?

1 个答案:

答案 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会更好(更好),并且它会起作用。

相关问题