Python核心语法——面向对象基础
一、编程范式概览1.1 面向过程编程核心思想把一个需求分解成一系列要执行的步骤然后按照步骤依次执行这些任务关注的是流程、步骤。适用场景面向过程编程非常直接适合简单、线性的任务。1.2 面向对象编程对象可以理解为现实中具体的人/物在程序中的数字化身万物皆对象。它把一个人/物的特征和功能打包到一起是面向对象编程的基本单元关注的是谁来帮我做这件事儿。属性对象的状态数据方法对象的行为功能类描述的是一组具有相同属性特征和方法功能/行为的模板。对象对象是类的实例是基于类创建出来的实例对象。二、类与对象2.1 类的定义定义类的语法如下推荐使用大驼峰命名法如UserInfo、UserAccountclass 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 english2.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 fStudent(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就是程序运行过程中出现的错误它会中断程序的正常执行流程。常见异常类型NameErrorTypeErrorIndexErrorKeyErrorValueError异常不是坏东西而是编写健壮程序的重要工具。其作用保证数据、逻辑的正确性避免程序执行混乱在开发阶段尽量发现更多的问题尽早解决问题保障程序正常执行7.2 异常处理语法程序运行过程中出现异常有两种处理方案不做处理整个程序因为一个 Bug中断执行。捕获异常按照我们自己的处理方式处理完异常程序继续执行。捕获异常的语法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) # NameErrormy_color 未定义 def fun2(): fun3() def fun1(): fun2() if __name__ __main__: try: fun1() except NameError as e: print(f捕获到异常{e})当fun3中发生异常时它会向上传递到fun2→fun1→ 主程序如果主程序有try...except则捕获处理否则程序崩溃。八、总结面向对象编程OOP是 Python 的核心范式之一通过类与对象将数据和行为封装在一起提高了代码的复用性、可维护性和扩展性。掌握以下关键点即可快速上手类与对象类是模板对象是实例实例方法操作对象数据的行为self指代当前实例魔法方法自动触发的特殊方法如__init__、__str__属性分类实例属性对象独有与类属性共享异常处理使用try...except提供预案避免程序意外崩溃