设计模式,pickle模块,选课系统

一:作业讲解

# 让字典具备句点符操作数据的功能(对象的名称空间与对象的值不是一个概念)
class Mydict(dict):
    def __getattr__(self, item):
        return self.get(item)

    def __setattr__(self, key, value):
        self[key] = value


d = Mydict(name='zhang', age=18, hobby='read')

print(d.name)  # zhang
d.hobby = 'sing'  # 操作数据
print(d)  # {'name': 'zhang', 'age': 18, 'hobby': 'sing'}

二: 设计模式

1.如何理解设计模式
在IT行业有很多前辈针对固定的一些问题设计出了固定的解决套路

2.设计模式总共有23种
我们目前不需要掌握这么多种 后续再慢慢看(现在能力不足)

3.设计模式的分类(三类)
创建型
结构型
行为型

4.设计模式之单例模式

  • 4.1什么是单例模式?
  • 类加括号调用多次只允许产生一个对象
  • 4.2引出单例模式?
  • 正常情况下 类名只要加括号实例化产生对象 执行几次就会产生几个不同的对象 有时候我们不希望类频繁的产生不同的对象
  • 类中有很多很好用的方法 程序很多地方都需要使用(通过对象调用) 如果产生的地方特别多 那么会浪费一定的内存空间 所以需要使用单例
class MyClass:
	pass

obj1 = MyClass()
obj2 = MyClass()
obj3 = MyClass()
print(id(obj1), id(obj2), id(obj3))  # 2263190030944 2263190494080 2263189844464
	# 方式1:使用元类干预对象的创建过程
 	class Metaclass(type):
        # 记录对象是否被创建
        instance = None

        def __call__(self, *args, **kwargs):
            if self.instance:
                return self.instance
            # 1.获取空对象
            obj = super().__call__(*args, **kwargs)
            # 2.保存对象
            self.instance = obj
            # 3.返回空对象
            return obj


class single(metaclass=Metaclass):
    def __init__(self, name):
        self.name = name


obj1 = single('jason')  
obj2 = single('egon')
print(id(obj1))  # 2105202400992
print(id(obj2))  # 2105202400992
print(obj1.name)  # jason
print(obj2.name)  # jason

三:pickle模块

  • 1.什么是pickle模块?
  • bpickle模块与json模块很像 都是用来做序列化 反序列化的
  • 2.pickle模块的特点?
  • 并且pickle模块支持python所有数据类型 但是pickle不支持跨语言传输 只能python自己跟自己玩 兼容性不好
class MyClass:
    def __init__(self, name):
        self.name = name

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


# obj = MyClass('jason')
# 需求:将对象保存到文件 并且将来取出之后还可以通过句点符随意调用
# with open(r'a.txt','w',encoding='utf8') as f:
#     f.write(obj)  常规的文件操作不行
# import json
# with open(r'a.txt','w',encoding='utf8') as f:
#     f.write(json.dumps(obj))  json模块也不行
import pickle

# with open(r'a.txt', 'wb') as f:
#     f.write(pickle.dumps(obj))
#     pickle.dumps(obj, f)

with open(r'a.txt', 'rb') as f:
    data = pickle.load(f)
print(data)
print(data.name)
data.choice_course()
```

### 选课系统项目分析

四:选课系统

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

  • 讲师功能
    1.注册
    2.登录
    3.选择教授课程
    4.查看教授课程
    5.管理课程分数

  • 学生功能
    1.注册
    2.登录
    3.选择学校
    4.选择课程
    5.查看分数

3.系统架构设计
 三层架构    
    功能展示层        
    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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值