目录
任务描述
在 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
在我们调用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,B):
########## End ##########
pass
# 请在下面填入定义类D的代码
########## Begin ##########
class D(A,B):
########## End ##########
def check(self):
print("this is D.check()")
class E(C,D):
pass