MRO 和super():
在python3中,尤其是多继承体系结构中,当多个父类有相同的方法时,子类继承父类方法时,该以何种顺序进行解析。这就是MRO问题。
换句话说,MRO就是类的方法解析顺序表, 其实也就是继承父类方法时的顺序表。
super() 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会涉及到查找顺序(MRO)、重复调用(钻石继承)等种种问题。
对于如下的类的继承体系,输出结果如何?
注意,是在python3中进行测试:
#!/usr/bin/python3
# -*- coding: UTF-8 -*-
#A,B,C,D类,MRO测试用
class A:
name = "";
def getName(self):
return self.name;
def setName(self,nameStr):
self.name = nameStr;
print("[A] name = " + self.name);
class B(A):
def setName(self,name):
super().setName(name);
self.name = name+"->B";
print("[B] name = " + self.name);
class C(A):
def setName(self,name):
super().setName(name);
self.name = name+"->C";
print("[C] name = " + self.name);
class D(B,C):
def setName(self,name):
super().setName(name);
se

最低0.47元/天 解锁文章
1271

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



