Is there a way to use super() to call the __init__ method of each base class in Python?
假设我有一些Python代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Mother: def __init__(self): print("Mother") class Father: def __init__(self): print("Father") class Daughter(Mother, Father): def __init__(self): print("Daughter") super().__init__() d = Daughter() |
这个剧本印的是"女儿"。是否有任何方法可以确保调用基类的所有 init 方法?我想出的一个方法是:
1 2 3 4 5 | class Daughter(Mother, Father): def __init__(self): print("Daughter") for base in type(self).__bases__: base.__init__(self) |
号
这个剧本印的是"女儿"、"母亲"、"父亲"。使用super()或其他方法是否有很好的方法?
Raymond Hettinger在2015年的Pycon演讲中非常好地解释了这一点。简短的回答是"是",如果您这样设计,并在每个类中调用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Mother: def __init__(self): super().__init__() print("Mother") class Father: def __init__(self): super().__init__() print("Father") class Daughter(Mother, Father): def __init__(self): super().__init__() print("Daughter") |