1. 程式人生 > 其它 >百度飛槳公開課筆記——Python類繼承

百度飛槳公開課筆記——Python類繼承

技術標籤:跟隨GT的筆記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