📖 知识点
继承语法
class 子类名(父类名):
pass
父类(基类):已经写好的原始类,提供通用属性、方法
子类(派生类):继承父类,自动拥有父类所有非私有属性与方法
子类可以新增自己独有的属性、方法
示例代码
# 父类
class Student:
def __init__(self, name, age):
self.name = name
self.age = age
def show_info(self):
print(f"姓名:{self.name},年龄:{self.age}")
# 子类:VIP学员,继承Student
class VipStudent(Student):
pass
# 实例化子类对象
vip_stu = VipStudent("小王",17)
# 直接调用父类定义的方法
vip_stu.show_info()
运行输出:
姓名:小王,年龄:17
要点:
子类自动获得父类的属性、实例方法
pass代表暂时不新增任何逻辑,直接复用父类全部能力子类可以新增专属方法,父类无法使用子类新增的方法
带新增方法示例
class VipStudent(Student):
def exclusive_course(self):
print(f"{self.name} 可以学习VIP专属课程")
vip_stu = VipStudent("小王",17)
vip_stu.show_info()
vip_stu.exclusive_course()
💡 一句话理解父类 = 通用兵器图纸;子类 = 在这个图纸基础上,打造升级版兵器。
⚔️ Kata 实战任务
任务需求:
编写父类
Student:__init__接收 name、score;方法show_score()打印姓名和分数定义子类
HonorStudent(Student),继承 Student,新增方法get_award(),打印xxx获得优秀学员奖状实例化子类对象:hs = HonorStudent ("小雅",95)
调用继承来的 show_score (),再调用子类独有的 get_award ()
参考代码
# 父类
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def show_score(self):
print(f"学员:{self.name},分数:{self.score}")
# 子类:优秀学员,继承Student
class HonorStudent(Student):
# 子类新增专属方法
def get_award(self):
print(f"{self.name} 获得优秀学员奖状!")
hs = HonorStudent("小雅", 95)
# 调用父类继承的方法
hs.show_score()
# 调用子类自己新增的方法
hs.get_award()
运行输出:
学员:小雅,分数:95
小雅 获得优秀学员奖状!
🧠 思考题
普通 Student 对象能不能调用 get_award ()?为什么?
继承最大的好处是什么,如果不用继承该怎么实现同样功能?