Python __init__ 语法
我对一些使用继承来初始化类的例子感到困惑。有些例子看起来像这样:
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__()