百度飞桨公开课笔记——Python类继承

如何使用:

定义:

class 子类名(父类名):

情况1,如果子类有新增的属性,那么需要在子类__init方法中,调用父类的__init__

情况2,如果子类没有新增的属性,子类不需要写__init__方法

使用:
对象名 = 子类名(参数)

继承的好处:代码重用,升级功能(重写),新增功能(新的方法)

题目1,设计父类:

定义Student类,包括name、dob、age、gender和score属性,包括top3方法用来返回学生的最大的3个成绩(可重复)、sanitize方法用来将负的分数变为正的分数,负的分数可能是输入错误。声明stu_list对象组数用于存储所有的学生对象。最后输出所有的学生信息包括姓名、生日、年龄、性别、最高的3个分数。
数据如下:
stu1.txt 孙同学,2020-5-21,20,‘男’,77,56,77,76,92,58,-91,84,69,-91
stu2.txt 赵同学,2020-11-3,24,‘女’,65,68,72,95,-81,71,86,91,57,91
stu3.txt 王同学,2021-8-7,25,‘男’,87,78,90,-76,88,47,100,65,69,100
stu4.txt 李同学,2021-8-10,29,‘男’,92,54,85,71,-91,68,77,68,95,95
示例代码:

def get_coach_data(filename):
    with open(filename) as f:
        line = f.readline()
    return line.strip().split(',')  
stu1=get_coach_data('work/stu1.txt')
stu2=get_coach_data('work/stu2.txt')
stu3=get_coach_data('work/stu3.txt')
stu4=get_coach_data('work/stu4.txt') 
class Student:
    def __init__(self,a_name,a_dob,a_age,a_gender,a_score=[]):
        self.name=a_name
        self.dob=a_dob
        self.age=a_age
        self.gender=a_gender
        self.score=a_score
    def top3(self):
        return sorted(set([self.sanitize(s) for s in self.score]),reverse=True)[0:3]
    def sanitize(self,score_string):
        if '-' in score_string:
            score_string=abs(int(score_string))
        else:
            score_string=int(score_string)
        return score_string
stu_1=Student(stu1.pop(0),stu1.pop(0),stu1.pop(0),stu1.pop(0),stu1)
stu_2=Student(stu2.pop(0),stu2.pop(0),stu2.pop(0),stu2.pop(0),stu2)
stu_3=Student(stu3.pop(0),stu3.pop(0),stu3.pop(0),stu3.pop(0),stu3)
stu_4=Student(stu4.pop(0),stu4.pop(0),stu4.pop(0),stu4.pop(0),stu4)
print('姓名: %s,生日: %s,年龄: %s,性别: %s,分数: %s'%(stu_1.name,stu_1.dob,stu_1.age,stu_1.gender,stu_1.top3()))
print('姓名: %s,生日: %s,年龄: %s,性别: %s,分数: %s'%(stu_2.name,stu_2.dob,stu_2.age,stu_2.gender,stu_2.top3()))
print('姓名: %s,生日: %s,年龄: %s,性别: %s,分数: %s'%(stu_3.name,stu_3.dob,stu_3.age,stu_3.gender,stu_3.top3()))
print('姓名: %s,生日: %s,年龄: %s,性别: %s,分数: %s'%(stu_4.name,stu_4.dob,stu_4.age,stu_4.gender,stu_4.top3()))

参考输出:
在这里插入图片描述

题目2:通过父类创建子类:

定义Spostudent、Artstudent为Student的子类,在子类的属性里面新增了spe为特长分数。Spostudent包括的top3方法返回的是最低的3个得分(可重复),Artstudent包括top3方法返回的是最高的3个得分(可重复),最后使用多态的方式输出2个特长同学的姓名、生日、年龄、性别、分数、特长分。
数据如下:
stu5.txt 特长同学,2020-10-5,20,‘男’,180,87,98,77,76,92,58,-76,84,69,-47
stu6.txt 特长同学,2020-10-6,20,‘女’,230,76,48,82,88,92,58,-91,84,69,-68
示例代码:

stu5=get_coach_data('work/stu5.txt')
stu6=get_coach_data('work/stu6.txt')
class SportStudent(Student):
    def __init__(self,a_name,a_dob,a_age,a_gender,a_sport,a_score):
        Student.__init__(self,a_name,a_dob,a_age,a_gender,a_score)
        self.spe=a_sport
    def top3(self):
        return sorted(set([self.sanitize(s) for s in self.score]),reverse=False)[0:3]
class Artstudent(Student):
    def __init__(self,a_name,a_dob,a_age,a_gender,a_art,a_score):
        Student.__init__(self,a_name,a_dob,a_age,a_gender,a_score)
        self.spe=a_art
stu_5=SportStudent(stu5.pop(0),stu5.pop(0),stu5.pop(0),stu5.pop(0),stu5.pop(0),stu5)
stu_6=Artstudent(stu6.pop(0),stu6.pop(0),stu6.pop(0),stu6.pop(0),stu6.pop(0),stu6)
def print_spe(Student):
    print('姓名: %s,生日: %s,年龄: %s,性别: %s,分数: %s,特长分: %s'%(Student.name,Student.dob,Student.age,Student.gender,Student.top3(),Student.spe))
print_spe(stu_5)
print_spe(stu_6)

参考输出:
在这里插入图片描述

额外发现attention:父类构造函数有默认参数时,子类如果采用同样的默认格式可能没有想要的输出结果,这种情况下子类不应设置默认参数。

欢迎前来飞桨Paddle一起学习
课程链接:https://aistudio.baidu.com/aistudio/course/introduce/7073

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值