Python __init__语法

时间:2011-05-16 06:24:56

标签: python class constructor

在学习Python时,我对使用继承的类初始化语法感到困惑。在各种例子中,我看到过以下内容:

class Foo(Bar):
    def __init__(self, arg, parent = None):
        Bar.__init__(self, parent)
        self.Baz = arg
        etc.

虽然有时它只是

class Foo(Bar):
    def __init__(self, arg):
        Bar.__init__(self)
        etc.

何时需要确保使用“parent”作为初始化函数的参数?感谢。

2 个答案:

答案 0 :(得分:8)

通常只有当父类的构造函数明确需要这样的参数时,传递parent才是必需的。这在某些层次结构中使用,例如PyQt。

父类初始化的一个好习惯就是使用super

class Child(Father):
  def __init__(self):
    super(Child, self).__init__()

答案 1 :(得分:3)

在您的示例中,变量“parent”具有误导性。只需父类COULD需要提供必须提供的其他参数

class Pet:
    def __init__(self,name):
        self.name = name

class Dog(Pet):
    def __init__(self,name,age):
        Pet.__init__(self,name)
        self.age = age

在此示例中,父类Pet需要一个属性(名称),子类提供它

正如所指出的,使用“超级”语法来调用父类方法