Python核心语法——面向对象基础

📅 2026/7/6 5:16:18 👁️ 阅读次数 📝 编程学习
Python核心语法——面向对象基础

一、编程范式概览

1.1 面向过程编程

核心思想:把一个需求分解成一系列要执行的步骤,然后按照步骤依次执行这些任务(关注的是流程、步骤)。

适用场景:面向过程编程非常直接,适合简单、线性的任务。

1.2 面向对象编程

对象可以理解为现实中具体的人/物在程序中的数字化身(万物皆对象)。它把一个人/物的特征和功能打包到一起,是面向对象编程的基本单元(关注的是谁来帮我做这件事儿)。

  • 属性:对象的状态(数据)

  • 方法:对象的行为(功能)

:描述的是一组具有相同属性(特征)和方法(功能/行为)的模板。

对象:对象是类的实例,是基于类创建出来的(实例对象)。

二、类与对象

2.1 类的定义

定义类的语法如下(推荐使用大驼峰命名法,如UserInfoUserAccount):

class ClassName: def __init__(self, 参数列表): # 初始化属性 self.属性名 = 参数
  • __init__:初始化方法,对象创建后自动调用,主要用于设置对象的初始状态(设置对象属性)。

  • self:方法的第一个参数,表示当前创建的实例对象,方法调用时无需手动传递。

示例

class Student: def __init__(self, name, chinese, math, english): self.name = name self.chinese = chinese self.math = math self.english = english

2.2 对象的创建

通过类名加括号即可创建实例对象,传入__init__所需的参数:

stu = Student("张三", 90, 85, 88)

说明:__dict__是Python中用户自定义类实例的一个特殊属性,用于以字典形式存储对象的属性 。

三、实例方法

在类中定义实例方法时,定义语法与之前学习的函数定义的方式一致。self表示当前实例对象,调用时无需传递。

class Student: def __init__(self, name, chinese, math, english): self.name = name self.chinese = chinese self.math = math self.english = english def get_average(self): return (self.chinese + self.math + self.english) / 3 # 使用 stu = Student("李四", 80, 90, 95) print(stu.get_average()) # 88.333...

四、魔法方法

4.1 什么是魔法方法

魔法方法是指 Python 中提供的以双下划线开头和结尾的特殊方法,用于定义类的特殊行为,比如__init__。魔法方法是不需要我们手动调用的,Python 会在合适的时机自动调用。

默认行为(未重写时):

  • __str__:默认输出对象的内存地址(16进制)

  • __eq__:默认基于对象的内存地址进行比较

  • 比较运算符(<<=>>=)默认自定义对象之间不可以进行大小比较

4.2 常用的魔法方法

魔法方法触发时机
__init__对象创建后初始化
__str__使用print()str()
__eq__使用==比较时
__lt__使用<比较时
__le__使用<=比较时
__gt__使用>比较时
__ge__使用>=比较时

示例

class Student: def __init__(self, name, score): self.name = name self.score = score def __str__(self): return f"Student(name={self.name}, score={self.score})" def __eq__(self, other): return self.score == other.score def __lt__(self, other): return self.score < other.score

五、实例属性与类属性

属性分为两类:

  • 实例属性:属于每个具体对象的属性,每个对象都是独立的(各个对象特有的数据)。通过实例对象.属性方式操作。

  • 类属性:属于类本身的属性,所有实例共享的(所有对象共享的数据或配置)。通过类名.属性方式操作。

示例

class Student: school = "北京大学" # 类属性 def __init__(self, name, score): self.name = name # 实例属性 self.score = score # 实例属性 # 访问类属性 print(Student.school) # 北京大学 # 访问实例属性 s1 = Student("小明", 95) s2 = Student("小红", 88) print(s1.name) # 小明 print(s2.name) # 小红

六、案例实战

6.1 教务管理系统(成绩管理)

需求:采用面向对象的编程思想,完成教务管理系统的开发。教务管理系统可以管理在校学生的成绩信息,通过控制台菜单与用户交互,具体的功能如下:

  • 添加学生成绩:根据输入的学生姓名、语文成绩、数学成绩、英语成绩,记录在系统中

  • 修改学生成绩:根据输入的学生姓名,修改对应的学生成绩

  • 删除学生成绩:根据输入的学生姓名,删除对应的学生成绩

  • 查询指定学生成绩:根据输入的学生姓名,查找对应的学生成绩,并输出

  • 展示全部学生成绩:展示出系统中所有学生的成绩

实现代码

class Student: """学生类,存储单个学生的成绩信息""" def __init__(self, name, chinese, math, english): self.name = name self.chinese = chinese self.math = math self.english = english def __str__(self): return f"姓名: {self.name}, 语文: {self.chinese}, 数学: {self.math}, 英语: {self.english}" class EduManagement: """教务管理系统,管理所有学生""" def __init__(self): self.students = [] # 存储学生对象的列表 def add_student(self, name, chinese, math, english): """添加学生成绩""" # 检查是否已存在同名学生 for stu in self.students: if stu.name == name: print("该学生已存在,请勿重复添加。") return False student = Student(name, chinese, math, english) self.students.append(student) print(f"学生 {name} 的成绩添加成功!") return True def modify_student(self, name, chinese, math, english): """修改学生成绩""" for stu in self.students: if stu.name == name: stu.chinese = chinese stu.math = math stu.english = english print(f"学生 {name} 的成绩修改成功!") return True print(f"未找到名为 {name} 的学生。") return False def delete_student(self, name): """删除学生成绩""" for i, stu in enumerate(self.students): if stu.name == name: del self.students[i] print(f"学生 {name} 的成绩删除成功!") return True print(f"未找到名为 {name} 的学生。") return False def query_student(self, name): """查询指定学生成绩""" for stu in self.students: if stu.name == name: print(stu) return stu print(f"未找到名为 {name} 的学生。") return None def show_all(self): """展示全部学生成绩""" if not self.students: print("当前系统中没有学生成绩记录。") return print("===== 全部学生成绩 =====") for stu in self.students: print(stu) print("=======================") def main(): system = EduManagement() while True: print("\n===== 教务管理系统 =====") print("1. 添加学生成绩") print("2. 修改学生成绩") print("3. 删除学生成绩") print("4. 查询指定学生成绩") print("5. 展示全部学生成绩") print("0. 退出系统") choice = input("请选择操作(0-5):") if choice == "0": print("感谢使用,再见!") break elif choice == "1": name = input("请输入学生姓名:") chinese = float(input("请输入语文成绩:")) math = float(input("请输入数学成绩:")) english = float(input("请输入英语成绩:")) system.add_student(name, chinese, math, english) elif choice == "2": name = input("请输入要修改的学生姓名:") chinese = float(input("请输入新的语文成绩:")) math = float(input("请输入新的数学成绩:")) english = float(input("请输入新的英语成绩:")) system.modify_student(name, chinese, math, english) elif choice == "3": name = input("请输入要删除的学生姓名:") system.delete_student(name) elif choice == "4": name = input("请输入要查询的学生姓名:") system.query_student(name) elif choice == "5": system.show_all() else: print("无效选择,请重新输入。") if __name__ == "__main__": main()

6.2 购物车管理系统

需求:采用面向对象的编程思想,开发一个购物车管理系统,实现商品信息的添加、修改、删除、查询功能。系统使用自定义对象存储商品数据,通过控制台菜单与用户交互。具体功能如下:

  • 添加购物车:用户根据提示录入商品名称、以及该商品的价格、数量,保存该商品信息到购物车。

  • 修改购物车:要求用户输入要修改的购物车商品名称,然后再提示输入该商品的价格、数量,输入完成后修改该商品信息。

  • 删除购物车:要求用户输入要删除的购物车名称,根据名称删除购物车中的商品。

  • 查询购物车:将购物车中的商品信息展示出来,格式为:"商品名称: xxx, 商品价格: xxx, 商品数量: xxx"。

  • 退出购物车

实现代码

class Goods: """商品类,代表购物车中的单个商品""" def __init__(self, name, price, quantity): self.name = name self.price = price self.quantity = quantity def __str__(self): return f"商品名称: {self.name}, 商品价格: {self.price}, 商品数量: {self.quantity}" class ShoppingCart: """购物车系统,管理商品列表""" def __init__(self): self.cart = [] # 存储 Goods 对象的列表 def add_goods(self, name, price, quantity): """添加商品到购物车""" # 若已存在同名商品,提示并返回 for goods in self.cart: if goods.name == name: print("购物车中已有该商品,如需修改请使用修改功能。") return False new_goods = Goods(name, price, quantity) self.cart.append(new_goods) print(f"商品 {name} 已添加到购物车。") return True def modify_goods(self, name, price, quantity): """修改购物车中的商品信息""" for goods in self.cart: if goods.name == name: goods.price = price goods.quantity = quantity print(f"商品 {name} 的信息已更新。") return True print(f"未找到名为 {name} 的商品。") return False def delete_goods(self, name): """从购物车删除商品""" for i, goods in enumerate(self.cart): if goods.name == name: del self.cart[i] print(f"商品 {name} 已从购物车删除。") return True print(f"未找到名为 {name} 的商品。") return False def show_cart(self): """展示购物车所有商品""" if not self.cart: print("购物车为空。") return print("===== 购物车商品列表 =====") for goods in self.cart: print(goods) print("==========================") def main(): cart = ShoppingCart() while True: print("\n===== 购物车管理系统 =====") print("1. 添加商品") print("2. 修改商品") print("3. 删除商品") print("4. 查询购物车(展示全部)") print("0. 退出购物车") choice = input("请选择操作(0-4):") if choice == "0": print("退出购物车,欢迎下次光临!") break elif choice == "1": name = input("请输入商品名称:") price = float(input("请输入商品价格:")) quantity = int(input("请输入商品数量:")) cart.add_goods(name, price, quantity) elif choice == "2": name = input("请输入要修改的商品名称:") price = float(input("请输入新的商品价格:")) quantity = int(input("请输入新的商品数量:")) cart.modify_goods(name, price, quantity) elif choice == "3": name = input("请输入要删除的商品名称:") cart.delete_goods(name) elif choice == "4": cart.show_cart() else: print("无效选择,请重新输入。") if __name__ == "__main__": main()

七、异常处理

7.1 什么是异常

异常(也称为 Bug)就是程序运行过程中出现的错误,它会中断程序的正常执行流程。

常见异常类型

  • NameError

  • TypeError

  • IndexError

  • KeyError

  • ValueError

异常不是坏东西,而是编写健壮程序的重要工具。其作用:

  • 保证数据、逻辑的正确性,避免程序执行混乱

  • 在开发阶段,尽量发现更多的问题,尽早解决问题,保障程序正常执行

7.2 异常处理语法

程序运行过程中出现异常,有两种处理方案:

  1. 不做处理:整个程序因为一个 Bug,中断执行。

  2. 捕获异常:按照我们自己的处理方式,处理完异常,程序继续执行。

捕获异常的语法(finally可有可无):

try: # 可能出错的代码 except 异常类型 as e: # 处理异常的代码 finally: # 无论是否发生异常都会执行的代码(可选)

示例

try: num = int(input("请输入一个数字:")) result = 10 / num print(f"结果是:{result}") except ValueError: print("输入无效,请输入一个数字。") except ZeroDivisionError: print("除数不能为0。") except Exception as e: print(f"发生了未知异常:{e}") finally: print("程序执行完毕。")

7.3 异常的传递

异常传递就是异常在函数调用中层层上报的过程,直到有人处理它,或者程序崩溃。

def fun3(): print(my_color) # NameError,my_color 未定义 def fun2(): fun3() def fun1(): fun2() if __name__ == "__main__": try: fun1() except NameError as e: print(f"捕获到异常:{e}")

fun3中发生异常时,它会向上传递到fun2fun1→ 主程序,如果主程序有try...except则捕获处理,否则程序崩溃。

八、总结

面向对象编程(OOP)是 Python 的核心范式之一,通过类与对象将数据和行为封装在一起,提高了代码的复用性、可维护性和扩展性。掌握以下关键点即可快速上手:

  • 类与对象:类是模板,对象是实例

  • 实例方法:操作对象数据的行为,self指代当前实例

  • 魔法方法:自动触发的特殊方法,如__init____str__

  • 属性分类:实例属性(对象独有)与类属性(共享)

  • 异常处理:使用try...except提供预案,避免程序意外崩溃