11月9日学习归纳总结

11月9日学习归纳总结

一、单例模式实现的多种方式

'''
单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
'''
通过使用类实现
class C1(object):
    __instance=None
    def __init__(self,name,age):
        self.name=name
        self.age=age
    @classmethod
    def singleton(cls):
        if not cls.__instance:
            cls.__instance=cls('jason',18)
        return cls.__instance
obj1=C1.singleton()
obj2=C1.singleton()
obj3=C1.singleton()
print(id(obj1),id(obj2),id(obj3))
obj4=C1('coco',16)
obj5=C1('seven',12)
print(id(obj4),id(obj5))
基于__new__方法实现
ass Mumeta(type):
    def __init__(self,name,bases,dic):
        self.__instance=object.__new__(self)
        self.__init__(self.__instance,'jason',18)
        super().__init__(name,bases,dic)
    def __call__(self, *args, **kwargs):
        if args or kwargs:
            obj=object.__new__(self)
            self.__init__(obj,*args,**kwargs)
            return obj
        return self.__instance
class Mysql(metaclass=Mumeta):
    def __init__(self,name,age):
        self.name=name
        self.age=age
obj1=Mysql()
obj2=Mysql()
print(id(obj1),id(obj2))#2480571889287 2480571889287
obj3=Mysql('coco',12)
obj4=Mysql('seven',21)
print(id(obj4),id(obj3))#2480572568137 2480572567962
'''基于模块的单例模式:提前产生一个对象 之后导模块使用'''
def outer(cls):
    _instance=cls('jason',12)
    def inner(*args,**kwargs):
        if args or kwargs:
            obj=cls(*args,**kwargs)
            return obj
        return _instance
    return inner
@outer
class Mysql:
    def __init__(self,host,port):
        self.host=host
        self.port=port
obj1=Mysql()
obj2=Mysql()
obj3=Mysql()
print(obj1 is obj2 is obj3)#True
obj4=Mysql('1.2.3.4',123)
obj5=Mysql('4.3.2.1',321)
print(id(obj4),id(obj5))#2152130515101 2152130515207

二、pickle序列化模块

'''
优势:能够序列化python中所有的类型
缺陷:只能够在python中使用 无法跨语言传输 
需求:产生一个对象并保存到文件中 取出来还是一个对象
'''
import pickle
class Demo:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def func1(self):
        print('from func')

    def func2(self):
        print('from func1')

obj = Demo('jason', 18)

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

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

print(data)  # <__main__.Demo object at 0x000001C693A1BE54>
data.func1()  # from func1
data.func2()  # from func2
print(data.name)  # jason

三、选课系统需求分析

3.1 整体需求

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

3.2 功能提炼

1.管理员功能
	注册功能
 	登录功能
 	创建学校
 	创建课程
 	创建老师
2.讲师功能
	登录功能
 	选择课程
 	查看课程
 	查看学生分数
	修改学生分数
3.学生功能
	注册功能
 	登录功能
 	选择学校
 	选择课程
 	查看课程分数

3.3 选课系统架构设计

三层架构
与ATM架构设计的差异
1.第一层做分层展示
2.第三层创建models.py存储所有的类 只有该py文件内的代码有资格调用db_handler

3.4 选课系统目录搭建

ccs
	start.py
    conf
    	setting.py
    core
    	src.py
    	admin_view.py
        student_view.py
        teacher_view.py
    db
    	db_handler.py
        models.py
    interface
    	admin_interface.py
        student_interface.py
        teacher_interface.py
    lib
    	common.py
    readme.txt
    requirements.txt
        
posted @ 2022-11-09 17:23  小王应该在学习!  阅读(41)  评论(0)    收藏  举报