ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python学习Day35

2022-08-01 21:32:58  阅读:158  来源: 互联网

标签:py name 选课 python 创建 self Day35 学习 pickle


Day 35

今日内容概要

  • 设计模式
  • pickle模块
  • 选课系统项目分析
  • 选课系统架构设计

今日内容详细

1.设计模式
1.什么是设计模式?
	在IT行业有很多前辈针对固定的问题设计出固定的解决套路
2.设计模式共有23种
3.设计模式分三大类:创建型、结构型、行为型
4.设计模式——单例模式
	类加括号调用多次只允许产生一个对象
    class MyClass:
    	pass
    obj1=MyClass()
    obj2=MyClass()
    print(id(obj1),id(obj2))#2485125659088 2485125478240
    正常情况下类名加括号实例化产生对象时,执行几次就产生几个对象
    但是产生不同的对象就会占用一些内存浪费资源,所以就用到了单例模式
方式1:使用元类干预对象的创建过程

#创建一个元类继承type
class MyMeTaClass(type):
    #记录是否已经创建了对象
    instance = None
    def __call__(self,*args,**kwargs):
        if self.instance:
            return self.instance
        #获得空对象
        obj = super().__call__(*args, **kwargs)
        #保存对象
        self.instance = obj
        #返回空对象
        return obj
class Single(metaclass = MyMeTaClass):
    def __init__(self, name):
        self.name = name
obj1 = Single('jason')
obj2 = Single('torry')
print(id(obj1),id(obj2),)#1593437556992 1593437556992
print(obj1.name)#jason
print(obj2.name)#jason
2.pickle模块
1.pickle模块与json模块很像 都是用序列化 反序列化的
2.优点:支持python所有数据类型
3.缺点:不支持跨语言传输,只能python自己使用,兼容性不好

  本周选课系统,需要用该模块将对象保存到文件中(json不能实现),后续不会再用,因为有更高级的方法:ORM(对象关系映射)
class MyClass:
    def __init__(self, name):
        self.name = name

    def choice_course(self):
        print('%s正在选课'%self.name)
obj=MyClass('jason')

#需求:将对象保存到文件,且取出后还可以通过句点符随意调用
方法1:错误
    with open(r'a.txt', 'w', encoding='utf8') as f:
        f.write(obj)
  	  注意:常规的文件操作不行,只能产生文件里面没内容
    
方法2:错误
    import json
    with open(r'a.txt', 'w', encoding='utf8') as f:
        f.write(json.dumps(obj)) 
	  注意:json模块也不行,只能产生文件里面没内容
    
方法3:正确
    import pickle
    with open(r'a.txt','wb') as f:
        # dumps形式存入
        # f.write(pickle.dumps(obj))
        # dump形式存入
        pickle.dump(obj,f)
    with open(r'a.txt','rb') as f:
        #load形式取出
        data = pickle.load(f)
    print(data)#打印出来是一个对象<__main__.MyClass object at 0x000002484AE56A60>
    print(data.name)#jason
    data.choice_course()#jason正在选课
    """
    pickle有一个限制:在当前程序名称空间中一定要有产生该对象类的存在,如果已经存入进去,把类清除后再取出会报错
    """
3.选课系统项目分析
选课系统
  角色:学校、学员、课程、讲师
  要求:
    1. 创建北京、上海 2 所学校
    2. 创建linux,python,go 3个课程,linux\py在北京开,go在上海开
    3. 课程包含,周期,价格,通过学校创建课程 
    4. 通过学校创建班级,班级关联课程、讲师,创建学员时,选择学校,关联班级
    5. 创建讲师角色时要关联学校
    6. 提供三个角色接口  
    	6.1 学员视图:可以注册,交学费,选择班级,  
    	6.2 讲师视图:讲师可管理自己的班级,上课时选择班级,查看班级学员列表,修改所管理的学员的成绩   
    	6.3 管理视图:创建讲师,创建班级,创建课程
    7. 上面的操作产生的数据都通过pickle序列化保存到文件里

功能分析:
	管理员功能(最核心):
        1.注册
        2.登录
        3.创建讲师
        4.创建学校
        5.创建课程
	讲师功能:
        1.注册
        2.登录
        3.选择教授课程
        4.查看教授课程
        5.管理课程分数
 	学生功能:
        1.注册
        2.登录
        3.选择学校
        4.选择课程
        5.查看分数
4.选课系统架构设计
三层架构:
	功能展示层:
        src.py
        admin_view.py
        teacher_view.py
        student_view.py
   	核心逻辑层:
        admin_interface.py
        teacher_interface.py
        student_interface.py
    数据处理层:
        db_hanlder.py
        model.py

image

作业

1.整理今日内容及博客
2.描述出选课系统管理员注册功能完整逻辑
3.尝试编写管理员其他功能

标签:py,name,选课,python,创建,self,Day35,学习,pickle
来源: https://www.cnblogs.com/Oreoxx/p/16541896.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有