python基础知识-魔法方法应用小练习、设计模式及单列模式、pickle模块、编写选课系统-项目分析、架构设计

魔法方法应用小练习

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

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


d = MyDict(name='curry', pwd=111, hobby='read')
print(d.name)  # curry
d.abc = '叫地主'
d.name = 'curry NB'
print(d)  # {'name': 'curry NB', 'pwd': 111, 'hobby': 'read', 'abc': '叫地主'}

设计模式及单列模式

1.如何理解设计模式
	在IT行业有很多前辈针对固定的一些问题设计出了固定的解决套路
2.设计模式总共有23种
3.设计模式的分类(三类)
	创建型
	结构型
	行为型
4.设计模式之单例模式
	类加括号调用多次只允许产生一个对象

class MyClass:
    pass


obj1 = MyClass()
obj2 = MyClass()
obj3 = MyClass()
print(id(obj1), id(obj2), id(obj3))  # 2236477946464 2236478413744 2236477768224
"""正常情况下 类名只要加括号实例化产生对象 执行几次就会产生几个不同的对象"""
  	'''有时候我们不希望类频繁的产生不同的对象
  		类中有很多很好用的方法 程序很多地方都需要使用(通过对象调用)
  		如果产生的地方特别多 那么会浪费一定的内存空间 所以需要使用单例
  	'''

# 方式1:使用元类干预对象的创建过程
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('curry')
obj2 = Single('喂喂喂')
obj3 = Single('哈哈哈')
print(id(obj1), id(obj2), id(obj3))  # 1504505557728 1504505557728 1504505557728
print(obj1.name)  # curry
print(obj2.name)  # curry
print(obj3.name)  # curry

pickle模块

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

学习pickle模块是为了方便编写选课系统 我们需要将对象保存到文件 所以用该模块
后续不会用 而是用更高级的方法:ORM(对象关系映射)
"""
class MyClass:
    def __init__(self,name):
        self.name = name
    def choice_course(self):
        print('%s正在上网中' % self.name)
obj = MyClass('curry')
# 需求:将对象保存到文件 并且将来取出之后还可以通过句点符随意调用
# with open(r'a.txt','w',encoding='utf8')as f:
#     f.write(obj)  # 常规的文件操作不行(TypeError: write() argument must be str, not MyClass)

# import json
# with open(r'a.txt','w',encoding='utf8')as f:
#     f.write(json.dumps(obj))  # json模块不行(TypeError: Object of type MyClass is not JSON serializable)

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)  # <__main__.MyClass object at 0x0000013138124BB0>
print(data.name)  # curry
data.choice_course()  # curry正在上网中

编写选课系统-项目分析

选课系统
  角色:学校、学员、课程、讲师
  要求:
    1. 创建北京、上海 2 所学校
    2. 创建linux , python , go 3个课程 , linux\py 在北京开, go 在上海开
    3. 课程包含,周期,价格,通过学校创建课程 
    4. 通过学校创建班级, 班级关联课程、讲师5. 创建学员时,选择学校,关联班级
    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.查看分数

编写选课系统-系统架构设计

三层架构
    功能展示层
        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
posted @ 2022-08-01 17:11  初学者-11  阅读(42)  评论(0编辑  收藏  举报