Python __init__ 语法

11 投票
2 回答
14239 浏览
提问于 2025-04-16 17:42

我对一些使用继承来初始化类的例子感到困惑。有些例子看起来像这样:

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.

__init__中使用“父类”参数有什么目的呢?

2 个回答

3

在你的例子中,变量“parent”可能会让人误解。简单来说,父类可能需要额外的参数,这些参数必须提供。

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需要一个属性(名字),而子类则提供了这个属性。

正如所提到的,使用“super”语法来调用父类的方法。

9

一般来说,传递 parent 这个参数并不是必须的,只有在父类的构造函数明确需要这个参数时才需要传递。这个在某些类的层级结构中会用到,比如 PyQt。

一个好的父类初始化方式是使用 super

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

撰写回答