三亩地 三亩地SAN MU DI · CODE DIARY
ARTICLE DETAIL

日记详情

真实记录编程学习的某一天,欢迎挑你感兴趣的翻一翻。

Python基础 -- 面向对象基础

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()
← 返回列表