EduCoder-Linux 与 Python编程2021-类的继承-第2关:覆盖方法

目录

任务描述

在子类继承父类的方法时,若子类需要这个方法具有不同的功能,那么可以通过覆盖(overriding)来重写这个方法。本关的任务是让学习者掌握通过继承覆盖方法。

相关知识

通过继承覆盖方法,也就是在子类里再写一个与父类中一样的方法,实现自己想要实现的功能。例如:

class Parent:
def sayHello(self):
print(“hello,i am class parent”)
class Subclass(Parent):
def sayHello(self):
print(“hello,i am class subclass”)
sc = Subclass()
sc.sayHello()
结果为:

hello,i am class subclass
Subclass继承了Parent类,但是因为它在类中重写了sayHello(),所以在创建实例后,调用的是重写后的sayHello()。

调用父类方法
在重写了父类中的方法后,也可以调用父类中的被重写方法。这时就是去调用一个未绑定的父类方法。例如:

Parent.sayHello(sc)
结果为:

hello,i am class parent
还可以在子类的重写方法里显示调用。例如:

class Parent:
def sayHello(self):
print(“hello,i am class parent”)
class Subclass(Parent):
def sayHello(self):
Parent.sayHello(self)
print(“hello,i am class subclass”)
sc = Subclass()
sc.sayHello()
结果为:

hello,i am class parent
hello,i am class subclass
但是最好的方法是在子类的重写方法里使用super()内建方法。例如:

class Parent:
def sayHello(self):
print(“hello,i am class parent”)
class Subclass(Parent):
def sayHello(self):
super(Subclass,self).sayHello()
print(“hello,i am class subclass”)
sc = Subclass()
sc.sayHello()
结果为:

hello,i am class parent
hello,i am class subclass
如果您想了解更多覆盖方法的相关知识,请参考:[美] Wesley J.Chun 著《 Python 核心编程》第十三章。

编程要求

本关的任务是补全Point.py文件中的代码,具体要求如下:

填入覆盖父类getPoint()方法的代码,并在这个方法中分别得出x - y与z - h结果的绝对值。
本关涉及的代码文件src/Step2/Point.py的代码框架如下:

class point:
def init(self,x,y,z,h):
self.x = x
self.y = y
self.z = z
self.h = h
def getPoint(self):
return self.x,self.y,self.z,self.h
class line(point):
# 请在下面填入覆盖父类getPoint()方法的代码,并在这个方法中分别得出x - y与z - h结果的绝对值
########## Begin ##########
########## End ##########
print(length_one,length_two)

测试说明

本文的测试文件是Pointtest.py,具体测试过程如下:

平台自动编译生成Point.exe;
平台运行Point.exe,并以标准输入方式提供测试输入;
平台获取Point.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step2/Point.py的样例测试集:

预期输入:

12
41
6
0

预期输出:

29
6
预期输入:

2
90
65
10
预期输出:

88
55
开始你的任务吧,祝你成功!

这世间,唯有青春和梦想不可辜负。花开正好,微风不燥,扬帆起航,追逐梦想。

代码示例

class Point:
    def __init__(self,x,y,z,h):
        self.x = x
        self.y = y
        self.z = z
        self.h = h
    def getPoint(self):
        return self.x,self.y,self.z,self.h
class Line(Point):
    # 请在下面填入覆盖父类getPoint()方法的代码,并在这个方法中分别得出x - y与z - h结果的绝对值
    ########## Begin ##########
    def getPoint(self):
        length_one = abs(self.x - self.y)
        length_two = abs(self.z - self.h)
    ########## End ##########
        print(length_one,length_two)
上一篇:educoder实训平台----页面结点元素


下一篇:Educoder-Java面向对象 - 封装、继承和多态(参考)