python学习Day35

2022/8/2 14:23:54

本文主要是介绍python学习Day35,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

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.尝试编写管理员其他功能


这篇关于python学习Day35的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程