Python 类多重继承的初始化问题 [super().__init__()方法的调用问题 ]
Python 类的成员变量一般都在__init__() 方法中定义,因此,在编程中,多数类都包含__init__() 初始化函数。如果一个类是另一个类的子类,且要使用后者的变量和初始化功能时,就必须在初始化时调用父类的初始化方法。例如(程序1):
class A:
def __init__(self):
print('A initial')
self.a = 0
class C(A):
def __init__(self):
super(C, self).__init__()
if __name__ == '__main__':
cc = C()
print(‘cc.a = ’, cc.a)
print('Method Resolution Order is: ', C.mro())
运行这个程序会打印出:
A initial
cc.a = 0
Method Resolution Order is [<class '__main__.C'>, <class '__main__.A'>, <class 'object'>]
class C 初始化时,我们用 super(C, self).__init__() 引用了父类A的初始化方法,使得成员变量 a 可以在 C 的实例中使用,打印出:cc.a = 0。程序中print('Method Resolution Order is: ', C.mro()) 一句,打印出类的方法调用处理

文章详细解释了Python中类的初始化方法__init__()在多重继承场景下的使用,特别是super()函数的作用。super()并不直接调用父类方法,而是遵循MRO(方法解析顺序)调用下一个类的方法。在多重继承中,如果要确保所有父类的初始化都被调用,需要明确指定super()的参数,或者直接调用父类的__init__()。文章通过示例代码展示了如何正确处理这种情况,并指出在所有初始化方法中使用super().__init__()是个好习惯。

216

被折叠的 条评论
为什么被折叠?



