py 单例模式及面向对象选课系统 day 30
2022/4/13 6:22:53
本文主要是介绍py 单例模式及面向对象选课系统 day 30,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
今日学习内容
- 昨日作业讲解
- 设计模式之单例模式
- pickle模块
作业讲解
# 题目 编写元类规定对象的所有数据值转大写 eg: obj.name = 'jason' print(obj.name) # JASON class MytypeClass(type): def __call__(self, *args, **kwargs): args = [i.upper() for i in args] return super().__call__(*args, **kwargs) class MyClass(metaclass=MytypeClass): def __init__(self, name, gender): self.name = name self.gender = gender def __setattr__(self, key, value): self.__dict__[key] = value.upper() obj = MyClass('double', 'male') print(obj.name) print(obj.gender) obj.hobby = 'dbj' print(obj.hobby) # 结果 DOUBLE MALE DBJ
设计模式
市面上的设计模式有23种,大致可以分为三类: 1.创建类 2.结构类 3.行为类 # 因为目前所学有限,所以只需学习单例模式即可 '使用频率高,学完元类即可使用的模式' 同一个类加括号产生的对象肯定是不一样的 类加括号实例化就会产生一个全新的对象 class Single(type): new_obj = None def __call__(self, *args, **kwargs): if not self.new_obj: obj = super().__call__(*args, **kwargs) self.new_obj = obj return self.new_obj return self.new_obj class MyClass(metaclass=Single): def __init__(self, name): self.name = name obj1 = MyClass('jason') obj2 = MyClass('tony') print(id(obj1), id(obj2)) print(obj1.__dict__,obj2.__dict__) '以上仅是单例模式的其中一种表现方式' https://www.cnblogs.com/Dominic-Ji/p/10525994.html 单例模式是指:保证一个类仅有一个实例,并提供一个访问它的全局访问点
pickle模块
# 简介 pickle模块是Python专用的持久化模块,可以持久化包括自定义类在内的各种数据,比较适合Python本身复杂数据的存贮 # 缺点 持久化后的字串是不可认读的,并且只支持Python环境,不能用作与其它语言进行数据交换 # 例子需求:将对象保存到文件,并且取出来之后还可以使用对象的功能 import pickle class MyClass(object): school = 'school' def __init__(self, name): self.name = name def choose_course(self): print('%s正在选课' % self.name) obj = MyClass('double') print(obj.school) # school obj.choose_course() # double正在选课 with open(r'%s' % obj.name, 'wb') as f: pickle.dump(obj, f) with open(r'jason', 'rb') as f: data = pickle.load(f) print(data) # 取出文件中的对象 # <__main__.MyClass object at 0x000001335B8DDA20> print(data.name) # double print(data.school) # school 主要的方法: 在pickle中dumps()和loads()操作的是bytes类型,而在使用dump()和lload()读写文件时,要使用rb或wb模式,也就是只接收bytes类型的数据 1. pickle.dump(obj, file) 将Python数据转换并保存到pickle格式的文件内 withopen('data.pickle', 'wb') as f: pickle.dump(data, f) 2. pickle.dumps(obj) 将Python数据转换为pickle格式的bytes字串 import pickle dic = {"k1":"v1","k2":123} s = pickle.dumps(dic) print(s) 3. pickle.load(file) 从pickle格式的文件中读取数据并转换为Python的类型 withopen('data.pickle', 'rb') as f: data = pickle.load(f) 4. pickle.loads(bytes_object) 将pickle格式的bytes字串转换为Python的类型 import pickle dic1 = {"k1":"v1","k2":123} s = pickle.dumps(dic1) dic2 = pickle.loads(s) print(dic2)
选课系统的项目分析
项目的要求
选课系统 角色:学校、学员、课程、讲师 要求: 1. 创建北京、上海这2所学校 2. 创建linux , python , go这3个课程 ,linux\py在北京开, go在上海开 3. 课程包含:周期,价格,通过学校创建课程 4. 通过学校创建班级, 班级关联课程、讲师 5. 创建学员时,选择学校,关联班级 6. 创建讲师角色时要关联学校 7. 提供三个角色接口 7.1 学员视图: 可以注册,交学费,选择班级 7.2 讲师视图: 讲师可管理自己的班级,上课时选择班级,查看班级学员列表,修改所管理的学员的成绩 7.3 管理视图:创建讲师,创建班级,创建课程 8. 上面的操作产生的数据都通过pickle序列化保存到文件里
项目的架构
# 三层架构展示 首先是展示层: 包括管理员视图、学生视图、讲师视图 其次是后台核心程序: 管理员功能、学生功能、讲师功能 最后是数据层: models.by(存放以上三个角色的类数据) db_hanlter(存取数据的功能文件) Admin(存放管理员的信息) Teacher(存放教师的信息) Student(存放学生的信息)
项目目录搭建
启动文件 ---> start.py conf文件夹 ---> settings.py core文件夹 ---> src.py admin_view.py teacher_view.py student_view.py db文件夹 ---> db_handler.py models.py Admin ---> 管理员数据信息 Teacher ---> 教师数据信息 Student ---> 学生数据信息 interface文件夹 ---> admin_interface.py teacher_interface.py student_interface.py lib文件夹 ---> common.py 项目说明文件 ---> readme.txt 项目所导模块文件 ---> requirements.txt
数据保存剖析
类产生的对象在保存的时候 自动创建一个与类名一样的文件夹名 将数据保存到该文件夹内 # 如何通过对象获取类对应的字符串名称 obj = Admin('jason',123) # 固定方法 print(obj.__class__) # <class '__main__.Admin'> 类名 print(obj.__class__.__name__) # Admin 字符串
这篇关于py 单例模式及面向对象选课系统 day 30的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2025-01-10百万架构师第十三课:源码分析:Spring 源码分析:Spring核心IOC容器及依赖注入原理|JavaGuide
- 2025-01-10便捷好用的电商API工具合集
- 2025-01-09必试!帮 J 人团队解决物流错发漏发的软件神器!
- 2025-01-09不容小觑!助力 J 人物流客服安抚情绪的软件!
- 2025-01-09为什么医疗团队协作离不开智能文档工具?
- 2025-01-09惊叹:J 人团队用啥软件让物流服务快又准?
- 2025-01-09如何利用数据分析工具优化项目资源分配?4种工具推荐
- 2025-01-09多学科协作难?这款文档工具可以帮你省心省力
- 2025-01-09团队中的技术项目经理TPM:工作内容与资源优化策略
- 2025-01-09JIT生产管理法:优化流程,提升竞争力的秘诀