本文整理自《Effective Python 编写高质量 Python 代码的 59 个有效方法》第 25条:用 super 初始化父类
简单的继承体系
初始化父类的传统方式是在子类里用子类实例直接调用父类的 __init__ 方法
class MyBaseClass(object):
def __init__(self, value):
self.value = value
class MyChildClass(MyBaseClass):
def __init__(self):
MyBaseClass.__init__(self,5)
多重继承
多重基础基础例子
如果子类收到多重继承的影响(通常应该避免该做法),直接调用超类的 __init__ 方法会产生问题。
在子类里调用 __init__ 问题之一是调用顺序不固定,例如下面两个超类都操作了 value 实例字段,子类继承了各超类:
class MyBaseClass(object):
def __init__(self, value):
self.value = value
class TimesTwo(object):
def __init__(self):
self.value *= 2
class PlusFive(object):
def __init__(self):
self.value += 5
class OneWay(MyBaseClass, TimesTwo, PlusFive):
def __init__(self, value):
MyBaseClass.__init__(self, value)
TimesTwo.__init__(self)
PlusFive.__init__(self