news 2026/8/5 11:42:13

Python基础 -- 面向对象基础

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python基础 -- 面向对象基础

在前面我们用很多Python语法做了很多编码案例,那些都是面向过程的编程,就是把一个需求分解成一系列要执行的步骤,然后按照步骤依次执行这些任务(关注的是流程、步骤),适合简单线性的任务,这篇主要是讲面向对象编程

比如:我们要盖一个房子,我们的过程就是,平地基、打桩、浇水泥、施工、硬装、软装

一、面向对象的解释

1、介绍

面向对象:把对象(可以理解为具体的人/事)属性方法打包到一起,是面向对象的基本单元

2、案例解释

还是那个盖房子的案例:我们盖房子的拖拉机、水泥机、施工工人、材料等都可以是对象;

拖拉机的属性 :颜色、油耗、马力 功能 :挖土

水泥机的属性:容量、颜色 功能:存储水泥和搅拌水泥

工人的属性:工种、年龄、技能 功能:焊接、搬运

材料的属性:类型、数量、价格、材质 功能:铺贴、存储

面向对象关注的是谁能帮我来干这件事

二、类和实例

1、介绍

·类:描述的是一组具有相同属性(特征)和方法(功能/行为)的模板;如:月饼模具

·对象:对象是类的实例,是基于类创建出来的(实例对象);如:用模具做出来的各种月饼

·实例化:创建对象的过程;一个类可以创建无数个对象

2、类的定义

(1)命名:遵循大驼峰命名法,每个单词的首字母大写,单词之间没有分隔符;如UserInfo

(2)定义类的语法:

class 类名:

def __init__(self,参数列表)

self.属性名 = 参数值

self.属性名 = 参数值

#创建对象

对象名 = 类名(参数列表)

def定义在类的外面叫函数,定义在类的里面叫类的方法

案例:

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

__init__:初始化方法,对象创建后自动调用,主要用于设置对象的初始状态(对象属性)

self :

3、类中实例方法的定义(和之前的函数定义方法是一样的)

class 类名:

def __init__(self,形参列表):

self.属性名 = 参数值

self.属性名 = 参数值

def 方法名(self,形参列表):

.....

对象名 = 类名(参数列表)

对象名.方法名(参数列表)

案例:

class Car: def __init__(self, b,c,p): self.brand = b self.color = c self.price = p def show(self,g): print(f"{self.brand}有{g}功能") def show2(self,coupon): return self.price - coupon c1 = Car("BMW","Black",50000) print(c1.__dict__) c1.show("自动驾驶") print(f"{c1.brand}的售价是{c1.show2(2000)}") #BMW有自动驾驶功能 #BMW的售价是48000
4、魔方方法

(1)介绍:Python中提供的以双下划线开头和结尾的特殊方法,用于定义特殊行为,如:__init__

(2)魔方方法不用手动调用,Python会在合适的时机自动调用

魔法方法描述
__init__初始化方法
__str__字符串表示方法
__eq__比较两个对象是否相等
__lt__,__le__,__gt__,__ge__支持比较两个对象的大小(less than),小于等于(less than or equal),大于(greater than),大于等于(greater than or equal)
class Car: def __init__(self, name, price): self.name = name self.price = price def func1(self,func): print(f"{self.name}可以{func}") def __str__(self): return f"{self.name}{self.price}" def __eq__(self,other): return self.price == other.price and self.name == other.name def __le__(self,other): return self.price <= other.price car1 = Car("BMW",500000) car2 = Car("BMW",500000) print(car1) #在这里不需要专门去调用__str__方法,系统会自动调用 print(car1 == car2) #True print(car1 <= car2)
5、属性

(1)· 实例属性:属于每个对象的属性,每个对象都是独立的(各个对象特有的属性)

(2)· 类属性:属于类本身的属性,所有实例共享(所有对象共享的数据或配置)

通过实例查找属性时,会优先查找实例属性,实例属性不存在时,再查找类属性

三、案例

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

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

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

3、删除学生成绩:根据输入的学生姓名,查找对应的学生成绩

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

5、展示出系统中所有学生的成绩

import os os.environ["PYTHONIOENCODING"] = "utf-8" class Student: def __init__(self,name,Chinese,Math,English): self.name = name self.Chinese = Chinese self.Math = Math self.English = English def update(self,Chinese,Math,English): self.Chinese = Chinese self.Math = Math self.English = English def __str__(self): return f"{self.name}的语文成绩是:{self.Chinese};数学成绩是{self.Math};英语成绩是{self.English}" class Jiaow_Xitong: def __init__(self): self.Student_list = [] #添加学生信息 def add_ach(self): name = input("请输入学生姓名:") for s in self.Student_list: if s.name == name: print("该学生已存在") return chinese = float(input("请输入语文成绩:")) math = float(input("请输入数学成绩:")) english = float(input("请输入英语成绩:")) if 100 <= chinese <= 0 and 100 <= math <= 0 and 100 <= english<= 0: print("输入的成绩不在合理范围!") return else: stu = Student (name, chinese,math,english) self.Student_list.append(stu) print("添加成功") #修改学生信息 def alter_ach(self): name = input("请输入学生姓名:") for s in self.Student_list: if s.name == name: chinese = float(input("请输入要修改的语文成绩:")) math = float(input("请输入要修改的数学成绩:")) english = float(input("请输入要修改的英语成绩:")) if 100 <= chinese <= 0 and 100 <= math <= 0 and 100 <= english<= 0: print("输入的成绩不在合理范围!") return else: s.update(chinese,math,english) print("修改成功") return print("您输入的学生不存在") #删除学生信息 def del_s(self): name = input("请输入学生姓名:") for s in self.Student_list: if s.name == name: self.Student_list.remove(s) return print("您输入的学生不存在") #查询指定的学生成绩 def Seek(self): name = input("请输入目标学生的姓名:") for s in self.Student_list: if s.name == name: print(s) return print("该学生不存在") #展示系统中学生的成绩 def show(self): for s in self.Student_list: print(s) #运行系统 def run(self): print("欢迎使用教务管理系统\n1:添加学生信息\n2:修改学生信息:\n3、查询指定的额学生成绩\n4、展示系统中学生的成绩\n5、删除学生\n6、退出系统") while True: a = int(input("请输入你要进行的操作:")) match a: case 1: self.add_ach() case 2: self.alter_ach() case 3: self.Seek() case 4: self.show() case 5: self.del_s() case 6: break case _: print("输入错误") if __name__ == '__main__': edu = Jiaow_Xitong() edu.run()
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/5 11:41:10

3步完成黑苹果配置:Hackintool终极显卡驱动修复与系统优化指南

3步完成黑苹果配置&#xff1a;Hackintool终极显卡驱动修复与系统优化指南 【免费下载链接】Hackintool The Swiss army knife of vanilla Hackintoshing 项目地址: https://gitcode.com/gh_mirrors/ha/Hackintool Hackintool是黑苹果社区中备受推崇的图形化配置工具&am…

作者头像 李华
网站建设 2026/8/5 11:40:33

从零开始:Meshroom免费开源3D重建工具完全指南

从零开始&#xff1a;Meshroom免费开源3D重建工具完全指南 【免费下载链接】Meshroom Node-based Visual Programming Toolbox 项目地址: https://gitcode.com/gh_mirrors/me/Meshroom 想要将普通照片变成精美的3D模型吗&#xff1f;Meshroom作为一款完全免费的开源摄影…

作者头像 李华
网站建设 2026/8/5 11:40:12

Unreal Engine集成轻量级中文OCR:实现游戏场景文字实时交互

1. 项目概述&#xff1a;当游戏场景“开口说话” 在开发一款以现代都市或历史遗迹为背景的游戏时&#xff0c;我们常常希望玩家能与环境中的文字信息互动。比如&#xff0c;走进一间布满中文海报和告示的房间&#xff0c;玩家可以“阅读”墙上的文字&#xff0c;从而获取任务线…

作者头像 李华
网站建设 2026/8/5 11:39:24

UE5.1中Mixamo动画一键重定向至MetaHuman的完整流程与避坑指南

1. 项目概述&#xff1a;为什么我们需要Mixamo动画库&#xff1f; 如果你正在用Unreal Engine 5.1捣鼓MetaHuman&#xff0c;想让你的数字人角色动起来&#xff0c;那你肯定遇到过这个经典难题&#xff1a;高质量、适配MetaHuman骨架的动画资源&#xff0c;要么贵得离谱&#x…

作者头像 李华
网站建设 2026/8/5 11:38:51

Windows更新卡在检查阶段?从原理到实践的完整修复指南

1. 问题现象与本质剖析 如果你在Windows 10或Windows 11上点击“检查更新”&#xff0c;那个蓝色的圆圈转了几分钟、十几分钟甚至半小时&#xff0c;最后要么毫无反应&#xff0c;要么弹出一个模糊的错误代码&#xff0c;那你绝对不是一个人。这个“正在检查更新”的无限循环&a…

作者头像 李华
网站建设 2026/8/5 11:35:42

抖音批量下载终极指南:告别手动操作,效率提升10倍

抖音批量下载终极指南&#xff1a;告别手动操作&#xff0c;效率提升10倍 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallbac…

作者头像 李华