##【day13作业】 '''先完成今天课程的模块、包、面向对象的理解和练习,再写以下作业!''' # 【包、模块】 # 1、总结什么包?模块? # 包:本质上就是一个文件夹 # 模块:就是py文件,将重复使用的功能代码写入一个py文件里,提供给其他人使用 # 2、总结如何定义一个模块、并调用 # 定义一个模块要新建一个python文件,将函数、变量等写在文件里,供其他文件调用; # ① from 模块名称(py文件名) import 模块内部的变量/函数/类; # ② import 模块名称(py文件名) # 3、总结如何定义一个包、并调用 # 新建一个__init__.py文件夹,可以储存多个.py文件,管理多个模块; # ①from p1 import m1,m2 导入p1这个包下的m1模块、m2模块 # ②from p1 import * 导入p1这个包下的所有模块 # 【异常处理】 # 1、总结异常处理有什么作用? # ①只要程序遇到报错了,通过异常处理,不阻塞后续的代码继续执行 # ②无论代码程序报不报错,都需要记录程序执行的过程到日志文件里,方便日后的一个问题排查 # ③为了更加友好的用户体验,自定义友好的异常输出 # 2、总结异常处理的语法结构是什么样的? # try: # print( '存放可能报错的代码块...' ) # except Exception as e1: # print('只要报错了,就执行这一段,并捕获报错信息!记录报错的日志信息到日志文件里面去!') # else: # print('不会报错时才会执行的代码!') # print('如果代码正常执行,可以利用这个步骤来记录程序执行的日志信息,记录到日志文件里面...') # finally: # print('无论包不报错,都会执行的代码!') # print('一般用来释放资源的!') #【基础练习1】 # 1.创建一个学生类 Student,定义初始化方法__init__()初始化实例属性 name、sex、age、score(成绩列表) # ,以及类属性class_id=260824、class_name=Ai0824 stu1={'name':'南方宇','sex':'男','age':24,'score':[80,70,60]} stu2={'name':'北方宇','sex':'女','age':28,'score':[90,100,70]} class Student: class_id = 260824 class_name='Ai0824' def __init__(self,n,s,a,sc): self.name=n self.sex=s self.age=a self.score=sc def get_stuinfo(self): print(self.name,self.sex,self.age,self.score) def avg_score(self): n=sum(self.score)/len(self.score) print(n) # 2.实例化学生对象stu1、sut2,并挨个访问实例属性以及类属性,查看结果 s1=Student('南方宇','男',24,[80,70,60]) s2=Student('北方宇','女',28,[90,100,70]) print(s1.name,s1.sex,s1.age,s1.score) print(s2.name,s2.sex,s2.age,s2.score) print(Student.class_id,Student.class_name) # 3.定义一个 get_stuinfo() 方法,调用该方法可以返回学生的所有属性 s1.get_stuinfo() s2.get_stuinfo() # 4.定义成绩平均分的方法 avg_score() 来计算每个学生的平均分,实例对象调用方法后,返回该学生的平均分 s1.avg_score() s2.avg_score() # 【基础练习2】 # 1.创建一个老师类 Teacher,定义初始化方法__init__()初始化实例属性 name、age、project(科目)、salary # ,有类属性 company = '沃林数智'、boss = ['陈总','廖总'] tea1={'name':'东方宇','age':35,'project':'python','salary':12000} tea2={'name':'西方宇','age':44,'project':'java','salary':15500} class Teacher: company = '沃林数智' boss = ['陈总', '廖总'] s1 = Student('南方宇', '男', 24, [80, 70, 60]) s2 = Student('北方宇', '女', 28, [90, 100, 70]) def __init__(self,n,a,p,s): self.name=n self.age=a self.project=p self.salary=s def teaching(self, x): print(f'{self.name}老师正在使用{x}的方法教学') # 2.实例化 t1、t2 两个老师实例对象,并访问对应的实例属性和类属性 t1=Teacher('东方宇',35,'python',12000) t2=Teacher('西方宇',44,'java',15500) print(t1.name,t1.age,t1.project,t1.salary) print(t2.name,t2.age,t2.project,t2.salary) print(Teacher.company,Teacher.boss) # 3.定义一个 教学方法 teaching(self,x),x接收的是老师的教学方法 # ,实例对象调用时,返回的结果是 f'{xxx}老师正在使用{x}的方法教学...' t1.teaching('寓教于乐') t2.teaching('因材施教') # 4.通过t1.company 调用类属性,然后再进行 t1.company = '沃林牛逼集团' # ,再次通过类Teacher和t1实例对象分别调用company看看有什么不同?为什么? print(t1.company) t1.company = '沃林牛逼集团' print(t1.company) print(Teacher.company) # t1.company被赋值成为'沃林牛逼集团',是一个实例属性 # Teacher.company保持不变,是一个类属性 # 对实例属性的赋值并不会改变类属性。 # 5.通过t1对象去调用Student类里的get_stuinfo()方法可以吗?测试一下并思考 t1.s1.get_stuinfo() # 可以,将实例属性s1作为Teacher类里的类属性,可以使用get_stuinfo(). # 6.总结目前学习的面向对象的语法结构框架 class 类名: # 定义一个类,类的命名都要大写开头 类属性1:'' 类属性2:211321 def __init__(self,n,a,s): # 使用一个初始化方法 self.name=n self.age=a self.sex=s #将参数赋值给属性 def get_stu_info(self): # 定义一个方法,用来打印每个对象的属性 print(self.name,self.sex,self.age) # 实例化 s1 = 类名('姓名', 30, '男') # 这个过程叫做实例化,得到的结果叫做示例对象 #调用实例对象的属性 print(s1.name,s1.sex,s1.age) # 调用实例对象自己的方法 s1.get_stuinfo()