吉林省建设 安全 网站查公司的口碑和评价的网站

张小明 2026/1/1 15:58:27
吉林省建设 安全 网站,查公司的口碑和评价的网站,太原做网站公司,企业门户网站建设 验收前 6 课我们从基础数据类型、流程控制#xff0c;逐步进阶到函数、模块与异常处理#xff0c;掌握了 “函数式编程” 的核心能力。但在开发复杂程序#xff08;如管理系统、游戏、Web 应用#xff09;时#xff0c;函数式编程会暴露明显局限#xff1a;数据与操作数据的功…前 6 课我们从基础数据类型、流程控制逐步进阶到函数、模块与异常处理掌握了 “函数式编程” 的核心能力。但在开发复杂程序如管理系统、游戏、Web 应用时函数式编程会暴露明显局限数据与操作数据的功能相互分离代码结构松散难以维护和扩展。本节课将学习 Python 编程的核心思想 ——面向对象编程Object-Oriented Programming简称 OOP。OOP 通过 “类” 和 “对象” 将数据与操作数据的功能封装在一起实现代码的高内聚、低耦合同时通过继承和多态实现代码复用与灵活扩展是大型程序开发的标配思想。掌握 OOP你将具备开发复杂项目的核心能力实现从 “脚本编写者” 到 “程序开发者” 的跨越。一、课程目标✅ 理解面向对象的核心概念类Class与对象Object明确两者的关系✅ 掌握类的定义语法能创建类、实例化对象访问对象的属性与方法✅ 吃透构造方法init的作用学会初始化对象的属性✅ 理解封装的思想掌握私有属性、私有方法的定义与使用保障数据安全✅ 掌握继承的语法与作用实现子类复用父类代码以及子类对父类方法的重写✅ 了解多态的基础概念能在继承场景中实现多态特性✅ 能综合运用 OOP 思想编写基于类和对象的实战程序如学生成绩管理系统、待办事项系统✅ 建立 “面向对象” 思维学会用 “类” 抽象现实事物用 “对象” 实现具体功能。二、复习回顾函数式编程的局限与 OOP 的诞生我们先通过前序课程的 “学生成绩统计” 案例对比函数式编程与面向对象编程的差异理解 OOP 的优势。2.1 函数式编程的局限在第 4 课中我们用函数实现成绩统计代码结构如下python运行# 函数式编程数据与功能分离 def calc_avg(scores): return round(sum(scores)/len(scores), 1) # 数据列表/字典与函数分离 student1 {name: 张三, scores: [85, 92, 78]} student2 {name: 李四, scores: [90, 88, 95]} # 调用函数处理数据 avg1 calc_avg(student1[scores]) avg2 calc_avg(student2[scores])这种方式的问题的是数据student1、student2与操作数据的函数calc_avg相互独立需要手动传递数据代码冗余若数据结构变化如新增 “年龄” 属性所有关联函数都需要修改维护成本高无法直观体现 “学生” 这个事物的完整性数据和功能分散在不同地方。2.2 OOP 的解决方案OOP 通过 “类” 将 “学生” 的数据姓名、成绩和功能计算平均分、打印信息封装在一起形成一个完整的 “抽象事物”使用时直接创建 “对象”具体的学生调用对象的属性和方法即可结构更清晰、更易维护python运行# 面向对象编程数据与功能封装 class Student: def __init__(self, name, scores): # 数据属性 self.name name self.scores scores # 功能方法 def calc_avg(self): return round(sum(self.scores)/len(self.scores), 1) # 创建对象具体的学生 student1 Student(张三, [85, 92, 78]) student2 Student(李四, [90, 88, 95]) # 调用对象的方法无需手动传递数据 avg1 student1.calc_avg() avg2 student2.calc_avg()可以看到OOP 让代码更具 “整体性”直观体现了 “学生” 这个事物的属性和行为这就是 OOP 的核心优势。三、核心知识点 1类与对象 ——OOP 的基础3.1 核心概念类与对象的关系类Class是对一类事物的抽象描述定义了这类事物的共同属性数据和方法功能。比如 “学生类” 定义了所有学生都有的 “姓名、成绩” 属性以及 “计算平均分” 的方法。类比类就像 “汽车设计图纸”规定了汽车的结构轮子、发动机和功能行驶、刹车。对象Object是类的具体实例是真实存在的事物。比如根据 “汽车设计图纸” 生产出的具体汽车每个汽车都是一个对象有自己的颜色、速度等具体属性。类比对象就像 “具体的某辆汽车”是图纸的实际产物。核心关系类是对象的模板对象是类的实例一个类可以创建多个对象每个对象共享类的方法但有自己独立的属性。3.2 类的定义与对象的实例化3.2.1 定义类class 关键字Python 用class关键字定义类基础语法python运行class 类名: 类的文档字符串说明类的功能 # 类的属性数据 类属性 值 # 类的方法功能 def 方法名(self, 参数列表): 方法体代码类名遵循 “大驼峰命名法”每个单词首字母大写如 Student、UserManager区分于函数的小驼峰self参数是实例方法的第一个参数代表当前对象本身用于访问对象的属性和方法调用方法时无需手动传递Python 自动传入。3.2.2 实例化对象创建对象通过 “类名 ()” 的方式创建对象实例化语法python运行对象名 类名(参数列表) # 参数列表对应类的构造方法参数示例 1定义 Student 类并创建对象python运行# 定义Student类模板 class Student: 学生类封装学生的姓名、成绩属性和计算平均分的方法 # 类属性所有对象共享的属性如学校名称 school 北京大学 # 实例方法对象的功能 def introduce(self): 自我介绍打印姓名和学校 print(f大家好我是{self.name}来自{self.school}) # 实例化对象创建具体学生 # 注意此时直接创建对象会报错因为还未初始化name属性需要构造方法四、核心知识点 2构造方法__init__—— 初始化对象属性4.1 什么是构造方法构造方法是类中的特殊方法方法名为__init__前后各两个下划线在创建对象时自动调用核心作用是初始化对象的实例属性给对象的属性赋值。没有构造方法时对象的属性无法在创建时初始化需要手动赋值不灵活有了构造方法可以在创建对象时直接传入属性值。4.2 构造方法的语法与示例语法python运行class 类名: def __init__(self, 参数列表): # 初始化实例属性self.属性名 参数 self.属性名1 参数1 self.属性名2 参数2示例 2完善 Student 类添加构造方法python运行class Student: # 类属性所有学生共享 school 北京大学 # 构造方法创建对象时自动调用初始化name和scores属性 def __init__(self, name, scores): # 实例属性每个对象独立拥有如姓名、成绩 self.name name self.scores scores # 实例方法计算平均分 def calc_avg(self): return round(sum(self.scores)/len(self.scores), 1) # 实例方法自我介绍 def introduce(self): print(f大家好我是{self.name}来自{self.school}我的平均分是{self.calc_avg()}) # 实例化对象创建时传入name和scores自动调用__init__ student1 Student(张三, [85, 92, 78]) student2 Student(李四, [90, 88, 95]) # 访问对象的属性 print(fstudent1姓名{student1.name}) print(fstudent1成绩{student1.scores}) print(fstudent2平均分{student2.calc_avg()}) # 调用对象的方法 student1.introduce() student2.introduce()运行结果plaintextstudent1姓名张三 student1成绩[85, 92, 78] student2平均分91.0 大家好我是张三来自北京大学我的平均分是85.0 大家好我是李四来自北京大学我的平均分是91.04.3 类属性与实例属性的区别通过上面的示例我们接触了两种属性类属性和实例属性核心区别如下类型定义位置访问方式特点是否共享示例类属性类内部、方法外部类名。属性名 / 对象名。属性名所有对象共享修改一个影响所有Student.school实例属性构造方法__init__内部仅对象名。属性名每个对象独立修改不影响其他student1.name示例 3修改类属性与实例属性python运行# 修改类属性所有对象共享修改后所有对象的类属性都会变 Student.school 清华大学 student1.introduce() # 输出大家好我是张三来自清华大学... student2.introduce() # 输出大家好我是李四来自清华大学... # 修改实例属性仅当前对象变化不影响其他对象 student1.name 张三三 student1.introduce() # 输出大家好我是张三三来自清华大学... student2.introduce() # 输出大家好我是李四来自清华大学...五、核心知识点 3封装 —— 数据安全的保障5.1 什么是封装封装是 OOP 的三大特性之一封装、继承、多态核心思想是将对象的属性和方法隐藏起来仅提供公开的接口供外部访问禁止外部直接操作对象的内部数据从而保障数据的安全性和一致性。比如银行账户的余额是敏感数据不能让外部直接修改如直接给 balance 赋值只能通过 “存款”“取款” 等公开方法操作方法内部可以添加校验逻辑如取款金额不能大于余额。5.2 Python 中的封装实现私有属性与私有方法Python 没有严格的访问控制关键字如 Java 的 private而是通过 “属性 / 方法名前加两个下划线__” 的方式将其定义为私有属性 / 私有方法限制外部直接访问。5.2.1 私有属性__属性名私有属性只能在类的内部访问外部无法直接通过 “对象名.__属性名” 访问只能通过类提供的公开方法访问 / 修改。5.2.2 私有方法__方法名私有方法只能在类的内部调用外部无法直接调用通常用于类内部的辅助逻辑。示例 4封装银行账户类Accountpython运行class Account: def __init__(self, name, balance): self.name name # 公开属性姓名 self.__balance balance # 私有属性余额外部无法直接访问 # 公开方法存款外部操作余额的接口 def deposit(self, amount): if amount 0: self.__balance amount print(f存款成功存入{amount}元当前余额{self.__balance}) else: print(错误存款金额必须大于0) # 公开方法取款外部操作余额的接口 def withdraw(self, amount): 0: print(错误取款金额必须大于0) return if amount self.__balance: print(错误余额不足) return self.__balance - amount print(f取款成功取出{amount}元当前余额{self.__balance}) # 公开方法查询余额 def get_balance(self): return self.__balance # 私有方法内部辅助逻辑外部无法调用 def __check_balance(self): 检查余额是否合法内部使用 return self.__balance 0 # 实例化账户对象 acc Account(张三, 1000) # 访问公开属性 print(f账户姓名{acc.name}) # 访问私有属性报错外部无法直接访问 # print(acc.__balance) # AttributeError: Account object has no attribute __balance # 通过公开方法操作私有属性 acc.deposit(500) # 存款成功存入500元当前余额1500 acc.withdraw(300) # 取款成功取出300元当前余额1200 print(f当前余额{acc.get_balance()}) # 1200 # 调用私有方法报错外部无法调用 # acc.__check_balance() # AttributeError: Account object has no attribute __check_balance六、核心知识点 4继承 —— 代码复用的核心6.1 什么是继承继承是 OOP 的另一大特性核心思想是一个类子类可以继承另一个类父类的属性和方法子类无需重新编写父类的代码直接复用同时可以新增自己的属性和方法或重写父类的方法。父类基类被继承的类提供通用的属性和方法子类派生类继承父类的类复用父类代码同时可扩展自己的功能。优势减少代码冗余实现代码复用便于扩展功能。6.2 继承的语法python运行class 子类名(父类名): 子类的文档字符串 # 子类的构造方法可选若有需调用父类构造方法 def __init__(self, 父类参数, 子类新增参数): # 调用父类构造方法初始化父类的属性 super().__init__(父类参数) # 初始化子类新增的属性 self.子类属性 子类新增参数 # 子类新增的方法可选 def 子类方法(self): 方法体 # 重写父类的方法可选覆盖父类的实现 def 父类方法(self): 重写后的方法体super()用于调用父类的方法如构造方法、实例方法避免重复代码子类可以继承父类的所有非私有属性和方法私有属性 / 方法无法继承。示例 5继承 Student 类实现 GraduateStudent研究生类python运行# 父类Student已定义包含name、scores属性calc_avg、introduce方法 class Student: school 北京大学 def __init__(self, name, scores): self.name name self.scores scores def calc_avg(self): return round(sum(self.scores)/len(self.scores), 1) def introduce(self): print(f大家好我是{self.name}来自{self.school}平均分{self.calc_avg()}) # 子类GraduateStudent研究生类继承Student类 class GraduateStudent(Student): # 子类新增属性研究方向major def __init__(self, name, scores, major): # 调用父类构造方法初始化name和scores属性 super().__init__(name, scores) # 初始化子类新增属性 self.major major # 子类新增方法打印研究方向 def show_major(self): print(f我的研究方向是{self.major}) # 重写父类的introduce方法覆盖父类实现添加研究方向 def introduce(self): # 可选调用父类的introduce方法再添加子类逻辑 # super().introduce() print(f大家好我是研究生{self.name}来自{self.school}研究方向{self.major}平均分{self.calc_avg()}) # 实例化子类对象 grad1 GraduateStudent(王五, [95, 98, 92], 人工智能) # 调用继承的父类方法 print(f研究生平均分{grad1.calc_avg()}) # 95.0继承自Student # 调用子类新增的方法 grad1.show_major() # 我的研究方向是人工智能 # 调用重写后的方法子类方法覆盖父类 grad1.introduce() # 大家好我是研究生王五来自北京大学研究方向人工智能平均分95.06.3 方法重写的意义方法重写Override是子类覆盖父类的同名方法核心意义是父类的方法实现不满足子类需求时子类可以自定义实现保持方法名一致实现 “多态” 的基础。比如Student 类的 introduce 方法只打印姓名和平均分而 GraduateStudent 需要额外打印研究方向通过重写方法即可实现外部调用时无需关注是父类还是子类对象统一调用 introduce 方法即可。七、核心知识点 5多态 —— 灵活扩展的基础7.1 什么是多态多态是 OOP 的第三大特性核心思想是不同的对象调用同名的方法时会执行不同的实现逻辑。简单说就是 “一个接口多种实现”。多态的实现依赖两个前提存在继承关系子类继承父类子类重写父类的方法。7.2 多态的示例python运行# 父类Student class Student: def __init__(self, name): self.name name def study(self): 父类的学习方法通用逻辑 print(f{self.name}在学习基础课程) # 子类1Undergraduate本科生重写study方法 class Undergraduate(Student): def study(self): print(f{self.name}本科生在学习专业基础课和选修课) # 子类2GraduateStudent研究生重写study方法 class GraduateStudent(Student): def study(self): print(f{self.name}研究生在学习科研课程和做实验) # 多态体现定义通用函数接收Student类型的对象父类类型 def study_course(student): # 调用study方法不同对象执行不同逻辑 student.study() # 创建不同对象 stu1 Undergraduate(张三) stu2 GraduateStudent(李四) # 调用通用函数传入不同对象 study_course(stu1) # 张三本科生在学习专业基础课和选修课 study_course(stu2) # 李四研究生在学习科研课程和做实验核心优势代码灵活性高study_course函数无需修改即可适配所有 Student 的子类对象便于扩展若新增 “博士生” 类PhDStudent只需继承 Student 并重写 study 方法无需修改study_course函数直接调用即可。八、综合实操案例基于 OOP 的学生成绩管理系统需求实现一个学生成绩管理系统支持添加不同类型的学生本科生、研究生、查询学生信息、统计班级平均分用 OOP 的封装、继承、多态特性实现。实现代码python运行# 父类Student class Student: school 北京大学 def __init__(self, name, scores): self.name name self.scores scores # 成绩列表[语文, 数学, 英语] def calc_avg(self): 计算平均分 return round(sum(self.scores)/len(self.scores), 1) def get_info(self): 获取学生信息父类通用逻辑 return f姓名{self.name}学校{self.school}平均分{self.calc_avg()} # 子类1Undergraduate本科生 class Undergraduate(Student): def __init__(self, name, scores, grade): super().__init__(name, scores) self.grade grade # 新增属性年级如2023级 # 重写get_info方法添加年级信息 def get_info(self): base_info super().get_info() return f{base_info}类型本科生年级{self.grade}级 # 子类2GraduateStudent研究生 class GraduateStudent(Student): def __init__(self, name, scores, major): super().__init__(name, scores) self.major major # 新增属性研究方向 # 重写get_info方法添加研究方向 def get_info(self): base_info super().get_info() return f{base_info}类型研究生研究方向{self.major} # 管理类StudentManager封装管理学生的功能 class StudentManager: def __init__(self): self.students [] # 存储所有学生对象 def add_student(self, student): 添加学生多态接收任意Student子类对象 # 校验确保添加的是Student或其子类的对象 if isinstance(student, Student): self.students.append(student) print(f添加成功学生信息{student.get_info()}) else: print(错误添加的不是有效学生对象) def query_all_students(self): 查询所有学生信息 if not self.students: print(暂无学生信息) return print(\n 所有学生信息 ) for i, student in enumerate(self.students, 1): print(f{i}. {student.get_info()}) def calc_class_avg(self): 统计班级平均分 if not self.students: print(暂无学生信息无法统计) return 0 total_avg sum(student.calc_avg() for student in self.students) class_avg round(total_avg / len(self.students), 1) print(f\n班级整体平均分{class_avg}) return class_avg # 系统运行入口 if __name__ __main__: manager StudentManager() while True: print(\n 学生成绩管理系统OOP版) print(1. 添加本科生) print(2. 添加研究生) print(3. 查询所有学生) print(4. 统计班级平均分) print(5. 退出系统) choice input(请输入操作序号) if choice 1: # 添加本科生 name input(请输入本科生姓名) scores list(map(int, input(请输入语文、数学、英语成绩逗号分隔).split(,))) grade input(请输入年级如2023) undergrad Undergraduate(name, scores, grade) manager.add_student(undergrad) elif choice 2: # 添加研究生 name input(请输入研究生姓名) scores list(map(int, input(请输入语文、数学、英语成绩逗号分隔).split(,))) major input(请输入研究方向) grad GraduateStudent(name, scores, major) manager.add_student(grad) elif choice 3: manager.query_all_students() elif choice 4: manager.calc_class_avg() elif choice 5: print(感谢使用系统再见) break else: print(输入无效请重新选择)运行示例plaintext 学生成绩管理系统OOP版 1. 添加本科生 2. 添加研究生 3. 查询所有学生 4. 统计班级平均分 5. 退出系统 请输入操作序号1 请输入本科生姓名张三 请输入语文、数学、英语成绩逗号分隔85,92,78 请输入年级如20232023 添加成功学生信息姓名张三学校北京大学平均分85.0类型本科生年级2023级 学生成绩管理系统OOP版 1. 添加本科生 2. 添加研究生 3. 查询所有学生 4. 统计班级平均分 5. 退出系统 请输入操作序号3 所有学生信息 1. 姓名张三学校北京大学平均分85.0类型本科生年级2023级九、课后作业基础 进阶巩固必做✅ 基础作业定义一个Dog类包含属性姓名、年龄、品种包含方法bark()打印 “XX 在叫”、show_info()打印狗的所有信息创建 2 个 Dog 对象调用方法定义Person类父类包含属性姓名、年龄方法eat()打印 “XX 在吃饭”定义Student类子类继承 Person新增属性学号重写eat()方法打印 “学生 XX 在食堂吃饭”基于第 1 题的 Dog 类实现封装将年龄定义为私有属性提供set_age(age)方法校验年龄必须为正数和get_age()方法禁止外部直接修改年龄。✅ 进阶作业完善学生成绩管理系统新增功能删除学生、修改学生成绩用封装确保成绩为正数实现多态的扩展新增 “博士生” 类PhDStudent继承 Student 类重写 get_info 方法添加 “导师姓名” 属性在系统中支持添加博士生思考OOP 的三大特性封装、继承、多态分别解决了什么问题在实际开发中如何判断是否需要使用 OOP十、后续学习指引本节课我们掌握了 Python 面向对象编程的核心 —— 类、对象、封装、继承、多态建立了 “将现实事物抽象为代码” 的 OOP 思维。这是开发复杂程序的基础也是后续学习 Python 高级应用的前提。 下一课我们将学习Python 面向对象进阶—— 掌握类方法、静态方法、属性装饰器property、抽象类、接口等高级特性解决更复杂的 OOP 场景如通用工具类、规范子类实现进一步提升代码的灵活性和可维护性。十一、本节课核心总结OOP 核心概念类是对象的模板对象是类的实例类封装了事物的属性数据和方法功能。构造方法__init__创建对象时自动调用用于初始化对象的实例属性是 OOP 的基础。三大特性封装通过私有属性 / 方法隐藏内部实现提供公开接口保障数据安全继承子类复用父类代码减少冗余可新增 / 重写方法实现扩展多态不同对象调用同名方法执行不同逻辑提升代码灵活性和可扩展性。核心思维将现实中的事物如学生、银行账户抽象为类用对象实现具体实例通过三大特性组织代码让复杂程序的结构更清晰、更易维护。关键语法定义类class 类名:实例化对象对象名 类名(参数)继承class 子类名(父类名):调用父类方法super().方法名()私有属性 / 方法__属性名、__方法名外部无法直接访问。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

物流公司网站模版刚建的网站百度搜不到

NCM转MP3终极指南:简单快速解密网易云音乐文件 【免费下载链接】ncmToMp3 网易云vip的ncm文件转mp3/flac - ncm file to mp3 or flac 项目地址: https://gitcode.com/gh_mirrors/nc/ncmToMp3 NCM转MP3是每个网易云音乐VIP用户都应该掌握的技能。你是否曾经因…

张小明 2026/1/1 12:36:46 网站建设

上海哪家公司做网站好typecho前端建站工具

Dimensions浏览器扩展:从像素焦虑到设计掌控的革命性工具 【免费下载链接】dimensions A Chrome extension for measuring screen dimensions 项目地址: https://gitcode.com/gh_mirrors/di/dimensions 你是否也曾在网页设计和前端开发中反复切换设计软件与浏…

张小明 2026/1/1 13:11:37 网站建设

怎么制作网站首页自己建立网站

这篇文章弄懂了 , 对计算机硬件包括软件编程会上一个很大的台阶引子回调函数在函数调用时 , 是并行计算吗?计算单元这个系统里有很多个计算单元 , CPU 、 FPU 、 ADC 都是计算单元 , 计算单元的本质就是些门电路 &…

张小明 2026/1/1 13:43:10 网站建设

做交易网站需要用到的软件有哪些杭州市优化服务

刚接触云服务那会儿,看到“新用户专享”几个字就心动,结果一注册,实名认证、对公账户、不支持信用卡…直接给我整不会了。腾讯云这些折扣是真的香,但门槛也是真的多,你是不是也卡在这些环节里头疼过? 别急&…

张小明 2026/1/1 13:44:13 网站建设

青岛网站建设‘’wordpress 联系我们表单

在很多人的印象里,硕士论文写作是一场沉默的独白——一个人、一台电脑、数不清的文献和一段又一段反复删改的文字。但或许,这种“孤勇者”式的写作模式,正在被一种新范式悄然改变:写作不再是单向输出,而是一场与智能工…

张小明 2026/1/1 14:19:49 网站建设

长春找工作哪个网站好个人档案网站该怎么做

jmeter是一个基于Java的开源性能测试工具,它可以用来测试静态和动态的资源,例如Web应用、数据库、FTP服务器等。但是,使用jmeter进行压力测试时,有时候可能会遇到内存溢出的问题,导致测试失败或者卡顿。 内存溢出是指…

张小明 2026/1/1 14:20:34 网站建设