第九章 · 面向对象编程 类 · 对象 · 继承

类与对象 · 模拟现实

面向对象编程用代码模拟现实事物,让程序组织更清晰。

类 (Class) 与实例 (Object)

class Student: """ 学生类 """ def __init__(self, name, age): self.name = name self.age = age def introduce(self): return f"大家好,我叫{self.name},我{self.age}岁了" # 实例化 xiaoming = Student("小明", 18) print(xiaoming.introduce())
关键点: __init__ 是构造方法,self 代表实例自身。类相当于模板,对象是具体的"人"。

使用类的对象-修改属性 & 对象容器

修改属性

可以直接通过 对象.属性 = 新值 修改,或定义方法更新。

class StudentGrade: def __init__(self, name, yuwen, shuxue): self.name = name self.yuwen = yuwen self.shuxue = shuxue def update(self, course, grade): if course == "语文": self.yuwen = grade elif course == "数学": self.shuxue = grade xiaoming = StudentGrade("小明", 88, 99) # 直接修改 xiaoming.yuwen = 89 xiaoming.shuxue = 96 # 通过方法修改 xiaoming.update("语文", 88) xiaoming.update("数学", 96)

类的对象放入列表和字典

# 列表存储 student_list = [xiaoming, xiaozhang, xiaozhao] for student in student_list: print(student.name, student.yuwen, student.shuxue) # 字典存储 (键为姓名) student_dict = { "小明": xiaoming, "小张": xiaozhang, "小赵": xiaozhao, } for name, student in student_dict.items(): print(f"{name} 语文{student.yuwen} 数学{student.shuxue}")
容器优势: 列表便于遍历,字典便于按名字快速查找。

类练习题 · 婚礼礼金程序

需求说明

朋友结婚,你帮忙收彩礼。记录姓名和礼金,计算统计信息。

实现代码 (婚礼礼金程序.py)

class Customer: def __init__(self, name, money): self.name = name self.money = money customers = [] while True: info = input("请输入来人姓名和金额:") if info == "quit": break name, money = info.split() money = int(money) customer = Customer(name, money) customers.append(customer) print("访客总人数:", len(customers)) moneys = [c.money for c in customers] print("总金额:", sum(moneys)) print("最大金额:", max(moneys)) print("最小金额:", min(moneys)) print("平均金额:", sum(moneys) / len(moneys))

这个练习题完美融合了类、列表、循环和数据处理。

类的继承 · 复用与扩展

父类定义公共能力,子类继承并扩展特有行为。

父类 Car
型号 · 价格 · 信息展示
子类 OilCar
继承 + 油箱 · 加油
子类 ElectricCar
继承 + 电池 · 充电
super()
调用父类方法,避免重复

继承示例

class Car: def __init__(self, model, price): self.model = model self.price = price def info(self): print(f"车型{self.model} 价格{self.price}万") class OilCar(Car): def __init__(self, model, price, box_size): super().__init__(model, price) self.box_size = box_size def add_oil(self, money): print(f"加{money}元汽油")
继承的好处: 减少重复代码,子类自动拥有父类所有属性和方法,并可覆盖或新增。

类与模块 · 文件组织

将类放在 .py 文件中,通过 import 复用。

# car.py class Car: ... # main.py import car my_car = car.Car("路虎", 80) my_car.info()