铸器篇-Day73 方法重写(子类覆盖父类方法)

0 次阅读 2026-10-20 09:14

📖 知识点

重写基础规则

  1. 子类写一个和父类完全同名的实例方法,就是重写

  2. 子类实例调用该方法:优先执行子类版本,父类原版被覆盖

  3. 如果还想在子类方法内部,调用父类原来的方法:使用 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 实战任务

任务需求:

  1. 父类Student,__init__接收 name、score;方法show_info()打印学员:xx,分数:xx

  2. 子类HonorStudent(Student),重写 show_info ()

  3. 在子类重写的方法内:先用 super () 执行父类原有打印,再额外追加一行文字✅ 荣获优秀学员称号

  4. 实例化子类对象:hs = HonorStudent ("小雅",95)

  5. 调用 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
✅ 荣获优秀学员称号

 

🧠 思考题

  1. 如果子类重写方法,不写 super (),调用 hs.show_info (),还会执行父类的代码吗?

  2. 什么时候适合重写方法?举一个生活例子。