设计模块、pickle模块、选课系统

本文介绍了Python中的设计模式,特别是单例模式,用于限制类的实例化次数。同时,讲解了pickle模块在对象序列化和反序列化中的作用,以及在选课系统项目中的应用。文章还探讨了系统的功能分析和架构设计,包括学生、讲师和管理员的角色接口。
摘要由CSDN通过智能技术生成

作业讲解

让字典具备句点符操作数据的功能

class Mydict(dict):
    def __getattribute__(self, item):
        return self.get(item)
    def __setattr__(self, key, value):
        self[key] = value


d = Mydict(name = 'nana',age = 18)
print(d)  # {'name': 'nana', 'age': 18}
print(d.name)  # nana
d.hobby = 'read'
print(d)  # {'name': 'nana', 'age': 18, 'hobby': 'read'}
d.name = 'huhu'
print(d)  # {'name': 'huhu', 'age': 18, 'hobby': 'read'}

设计模式

1.如何理解设计模式
	在IT行业有很多前辈针对固定的一些问题设计出了固定的解决套路
2.设计模式总共有233.设计模式的分类:创建型、结构型、行为型

设计模式之单例模式

正常情况下,类名只要加括号实例化产生对象,执行几次就会产生几个不同的对象。

class Myclass:
    pass
obj1 = Myclass()
obj2 = Myclass()
print(id(obj1))  # 2625218769696
print(id(obj2))  # 2625218769584

有时候我们不希望频繁的产生不同的对象(类中有很多很好用的方法,程序很多地方都需要使用(通过对象调用),如果产生的地方特别多,那么会浪费一定的内存空间),所以我们需要使用单例–类加括号调用多次只允许产生一个对象

使用元类干预对象的创建过程
class Metaclass(type):
    tag = None  # 记录是否创建了对象
    def __call__(self, *args, **kwargs):
        if self.tag:
            return self.tag
        obj = super().__call__(*args, **kwargs)  # 获取空对象
        self.tag = obj  # 保存空对象
        return obj  # 返回空对象
class Myclass(metaclass=Metaclass):
    def __init__(self,name,age):
        self.name = name
        self.age = age

obj1 = Myclass('nana',18)
obj2 = Myclass('huhu',100)
print(id(obj1))  # 1459220365040
print(id(obj2))  # 1459220365040

pickle模块

pickle模块与json模块都是用来做序列化和反序列化的,并且pickle模块支持python所有的数据类型,但是pickle模块不支持跨语言传输,兼容性不好

操作

需求:将对象保存到文件 并且将来取出之后还可以通过句点符随意调用

class Myclass:
    def __init__(self,name,age):
        self.name = name
        self.age = age
    def choice_course(self):
        print('上课了')
obj1 = Myclass('nana',18)
1.常规的文件操作–不可行
with open(r'a.txt','w',encoding='utf8')as f:
    f.write(obj1)  # 报错 TypeError: write() argument must be str, not Myclass
2.用json模块–不可行
with open(r'a.txt','w',encoding='utf8') as f:
    import json
    json.dump(obj1,f)  # 报错 TypeError: Object of type 'Myclass' is not JSON serializable
3.用pickle模块–可行
with open(r'a.txt','wb')as f:
    import pickle
    pickle.dump(obj1,f)

with open(r'a.txt','rb')as f:
    import pickle
    data = pickle.load(f)
print(data)  #<__main__.Myclass object at 0x0000027E75F0A240>
print(data.name)  # nana

选课系统项目分析

选课系统
  角色:学校、学员、课程、讲师
  要求:
    1. 创建北京、上海 2 所学校
    2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
    3. 课程包含,周期,价格,通过学校创建课程 
    4. 通过学校创建班级, 班级关联课程、讲师5. 创建学员时,选择学校,关联班级
    5. 创建讲师角色时要关联学校, 
    6. 提供三个角色接口  
    	6.1 学员视图, 可以注册, 交学费, 选择班级,  
    	6.2 讲师视图, 讲师可管理自己的班级, 上课时选择班级, 查看班级学员列表 , 修改所管理的学员的成绩   
    	6.3 管理视图,创建讲师, 创建班级,创建课程
    7. 上面的操作产生的数据都通过pickle序列化保存到文件里

功能分析

1.学生功能:
	1.1 注册功能
	1.2 登陆功能
	1.3 选择课程功能
	1.4 选择学校功能
	1.5 查看成绩功能
2.讲师功能:
	2.1 登陆功能
    2.2 选择教授课程
    2.3查看课程学生
    2.4 管理课程风湿
    2.5 查看教授课程
3.管理员功能
	3.1.注册功能
    3.2登陆功能
    3.3 创建讲师
    3.4创建学校
    3.5 创建课程
    

系统架构设计

三层架构
第一层:功能展示层
	src.py
    teacher_view.py
    admin_view.py
    student_view.py
第二层:核心架构层
	teacher_interface.py
    admin_interface.py
    student_interface.py
第三层:数据管理层
	db_handler.py
	model.py

补充知识

    class MyClass:
        pass
    obj = MyClass()
    print(MyClass.__name__)  # MyClass  专门获取类名对应的字符串名
    print(obj.__class__.__name__)  # MyClass
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值