📖 知识点
重写基础规则
子类写一个和父类完全同名的实例方法,就是重写
子类实例调用该方法:优先执行子类版本,父类原版被覆盖
如果还想在子类方法内部,调用父类原来的方法:使用
super()
示例代码
# 父类
class Student:
def __init__(self,name):
self.name = name
def introduce(self):
print(f"我是学员:{self.name}")
# 子类
class HonorStudent(Student):
# 重写父类introduce方法
def introduce(self):
print(f"✨ 优秀学员:{self.name}")
stu1 = Student("小明")
stu2 = HonorStudent("小雅")
stu1.introduce()
stu2.introduce()
输出:
我是学员:小明
✨ 优秀学员:小雅
super () 调用父类原方法
很多场景:不想完全抛弃父类逻辑,先执行父类原有代码,再追加子类新逻辑
class HonorStudent(Student):
def introduce(self):
# 调用父类的introduce
super().introduce()
print("我是一名优秀学员!")
💡 核心总结
不重写:子类直接沿用父类方法
重写:同名方法,子类优先
super ():在子类内部调取父类原版方法
⚔️ Kata 实战任务
任务需求:
父类
Student,__init__接收 name、score;方法show_info()打印学员:xx,分数:xx子类
HonorStudent(Student),重写 show_info ()在子类重写的方法内:先用 super () 执行父类原有打印,再额外追加一行文字
✅ 荣获优秀学员称号实例化子类对象:hs = HonorStudent ("小雅",95)
调用 show_info ()
参考代码
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
def show_info(self):
print(f"学员:{self.name},分数:{self.score}")
class HonorStudent(Student):
# 重写父类show_info
def show_info(self):
# 调用父类原本的方法
super().show_info()
# 子类额外新增逻辑
print("✅ 荣获优秀学员称号")
hs = HonorStudent("小雅", 95)
hs.show_info()
运行输出:
学员:小雅,分数:95
✅ 荣获优秀学员称号
🧠 思考题
如果子类重写方法,不写 super (),调用 hs.show_info (),还会执行父类的代码吗?
什么时候适合重写方法?举一个生活例子。
行者孙Python