任务描述
在 Python 中,多重继承就是允许子类继承多个父类,子类可以调用多个父类的方法和属性。但是,当多个父类拥有相同方法名的方法时,我们通过方法名调用父类方法就有一定的顺序。本关的任务就是让学习者掌握多重继承。
相关知识
请先看下面这个例子:
class A(object):
def test(self):
print(“this is A.test()”)
class B(object):
def test(self):
print(“this is B.test()”)
def check(self):
print(“this is B.check()”)
class C(A,B):
pass
class D(A,B):
def check(self):
print(“this is D.check()”)
class E(C,D):
pass
在这个例子中,类C继承自类A和类B,类D继承自类A和类B,类E继承自类C和类D。继承情况如下图1所示:
图1
图 1
在我们调用E.test()时,在类A和类B中都存在这个方法。但是由于在多重继承中遵循广度优先的方式,所以程序最先搜索类E,然后再搜索类C和类D。如果还没找到,再到类A中查找。若类A中存在这个方法,则调用这个方法,若在类A中也没有找到,则再到类B中查找。调用E.test()结果为:
this is A.test()
如果调用E.check()方法,那么先到类E中查找,然后在类C中查找,再到类D中查找。在类D中找到这个方法,调用这个方法。调用E.check()的结果为:
this is D.check()
如果您想了解更多多重继承的相关知识,请参考:[美] Wesley J.Chun 著《 Python 核心编程》第十三章。
编程要求
本关的编程任务是补全src/Step4/multiInherit.py文件的代码,实现当调用类E的test()时,继承的是类A的test()。具体要求如下:
填入定义子类C的代码;
填入定义子类D的代码。
本关涉及的代码文件src/Step4/multiInherit.py的代码框架如下:
class A(object):
def test(self):
print(“this is A.test()”)
class B(object):
def test(self):
print(“this is B.test()”)
def check(self):
print(“this is B.check()”)
#请在下面填入定义类C的代码
########## Begin ##########
########## End ##########
pass
#请在下面填入定义类D的代码
########## Begin ##########
########## End ##########
def check(self):
print(“this is D.check()”)
class E(C,D):
pass
e = E()
e.test()
测试说明
本关中填入代码后直接运行程序,按照运行结果判断正误,无需测试文件。以下是平台对src/Step4/multiInherit.py的样例测试集:
预期输出:
this is A.test()
开始你的任务吧,祝你成功!
掌握专业知识是创富的基础,没有这个基础,或是这个基础打得不够坚实,接下去的路你将寸步难行。创富者首先要做的便是成为这个行业的专家。
代码示例
class A(object):
def test(self):
print("this is A.test()")
class B(object):
def test(self):
print("this is B.test()")
def check(self):
print("this is B.check()")
# 请在下面填入定义类C的代码
########## Begin ##########
class C(A):
########## End ##########
pass
# 请在下面填入定义类D的代码
########## Begin ##########
class D(B):
########## End ##########
def check(self):
print("this is D.check()")
class E(C,D):
pass